程序员修炼之道29-在限时世界中抛球杂耍
2022-02-20 本文已影响0人
DZQANN
这一章就比较复杂了,主要讲的是状态模式和发布订阅。这两种都是开发中容易遇到的情形。
状态模式
看到书上画的状态机,突然感到有点熟悉,上一次看到它还是在编译原理的课堂上。它适用的情形是,一个对象有多个状态,对象的行为因为状态的不同而会有变化。
在实际的开发中这样的例子有很多。比如我们的订单运单就有已发布、已终止、已取消、已完成等等状态,每种状态会在特定的实践下调到下一个状态。
在我的印象里,我们的系统状态的变化仿佛并没有使用这种模式。具体的原因不得而知,我的猜想是,系统中特定对象的状态集合总是特定的几个,但是触发状态变化的实践总是会不断的增长。而状态模式的优势在于增加新的状态不需要修改老的状态代码,看起来就不是那么合适了。而这种事件不断增加,状态却不变的情形,能像到的做法就是添加一个包装类,每一个事件是一个方法,操作该对象。
发布订阅模式
这是系统中用的比较多的模式。传统的List<Observer>的用法基本没有,用的最多的还是MQ。用的最广泛的还是我们的核心对象,比如订单、运单、费用的改动。这些对象的改动都会出发对应的change事件,这个改动会通过topic广播。然后就会有一大堆东西监听它。好多外部系统都要求如果这些内容有所改动,要发消息让他们知道,这种情形下用发布订阅就很合适。
当然有些时候也会有比较取巧的做法。比如之前给一个客户做的上传文件生成合同报价的功能。对文件的校验会比较快,真正的保存会费一些时间。所以最后做的效果是,如果校验通过了,就自己发自己一个消息,异步保存,而老的线程就返回告诉用户,校验通过了!保存结果自己等等看吧!