系统分模块分层面的时机:
1)完成一次从功能需求,ui设计,代码设计,数据库设计的整体梳理或是迭代思考。这时结合经验判断哪些地方可能有较大的代码量,或是构造复杂度,则预先横向分块,纵向分层。
2)代码积累到一定程度,以当前能力,解决问题的速度越来越慢,碰上的问题的水准越来越低,数量越来越多,必须要析置出子系统。
3)信息流的某个下游模块,比如ui设计已经很复杂很完善,目标需求很明确的时候,可以在上游设计复杂和有针对性的功能和数据结构,为数据流的转承提供方便的子系统。
4)面向方面分层的并行的子系统。系统的 纵向复杂度很高,
比如包含互相交织系统-商户-客户-商品-优惠-属性-多语言-多币种,等等多重属性。
这时应该纵向分层,切面分层,这个切面,应该一直切到数据库,把系统完全切分成几个彼此独立的支持子系统。
比如商务子系统,会务子系统,语言子系统,管理子系统等等
数据库中应有一些高度抽象的主表,然后有子系统实体表,子系统关系表,子系统展现表,等等。
子系统之间的实体表没有关系
子系统不知道彼此的存在。
这样能避免出现复杂度倍乘关系。在复杂度倍乘的状况下,填充或修改一个实体,往往要考虑语言,币种,身份,属性等多方面东西,增减一个字段也是需要多方考虑,
以至于系统的任何一个模块的维护人员,都要了解全局逻辑的运转规则。
而系统实际上的复杂就在于规则。
系统就是若干虚拟的底层规则一直叠加到上层直至实际业务的结果。
面向切面的本质,就是面向无形的规则划分模块,而不是面向有形的信息,或是具体的行为。
任何规则复杂的东西,分开来处理。