定单作为业务关联最紧密和系统中逻辑最复杂的单元,我们很难完全剥离进行独立设计。不过基于 OO 的思想我们还是可以做些工作的。
看下面的简略设计图。
我们知道,定单的变化部分基本集中在折扣规则,商品数据信息上。那么还有很多是不变的,诸如用户信息、总金额、下单日期、确认日期、结算信息、配送信息等。我们将不变的部分放在抽象基类中,而将那些可变的部分以抽象方法让实际子类去单独处理。
如此设计的好处就是:
1. 定单管理系统可以设计成通用的,通过多态方法即可调取不同业务的定单内部信息。
2. 对于定单统计等而言,也无需处理不同的定单类型差异。
3. 随着业务的增加,我们可以随时很方便地增加新的定单类型,而无需对整个系统作出改动。
4. 由于新定单类型继承自抽象基类,那么它所需处理的内容只有很少的一部分。
5. 我们对抽象基类上的通用部分进行更改,所有业务定单类型自动适应。
当然,本文的介绍过于粗浅。定单类型设计的可扩展性往往决定了业务快速转换的时间,尽可能在设计上采取开闭原则(OCP)还是非常重要的。