知识卡片
层次按"距离输入输出的远近"定义,高层策略变更应更少更重大
内容
所有软件系统本质上都是一组策略语句的集合——程序不过是仔细描述如何将输入转化为输出的策略集合。非小型系统的整体业务策略通常能拆成多组更小的策略语句(计算业务逻辑的、格式化报告的、校验输入数据的等等),架构设计的工作重点之一,就是把这些策略彼此分离、再按变更方式重新分组:变更原因、时间、层次相同的策略归入同一组件,不同的分属不同组件,最终重排成一个有向无环图,图中每个节点是拥有相同层次策略的组件,每条链接是编译期的源码依赖关系。这里的”层次”有一个严格定义:一条策略距离系统输入/输出越远,层次就越高,直接管理输入输出的策略层次最低。这个定义直接推导出一条实践准则:高层策略离输入输出最远,变更频率通常最低,即使发生变更,原因也往往比低层策略更重大;反过来,低层策略(比如直接对接I/O设备的部分)很可能频繁经历一些小变更。设计良好的架构应该在设计良好的架构中,让源码依赖关系的方向由这个”层次”来决定,而不是由数据流向决定——低层组件应该依赖高层组件,而非反过来。通过将策略隔离、并统一让依赖方向指向高层策略,系统就能大幅降低变更带来的连锁影响:针对低层组件的紧急小修改几乎不会波及更高级、更重要的组件。
参考来源
- 位置:《架构整洁之道》第19章《策略与层次》引言"层次"(源文件:_epub-src/text/part0014_split_004.html)
- 结论依据:原文定义层次为"策略距离输入输出的远近",说明高层策略变更频率低、原因重大,低层策略变更频繁但影响小,并指出依赖方向应由层次决定、低层依赖高层,直接支撑本卡片结论。
- 原始内容:我们对"层次"是严格按照"输入与输出之间的距离"来定义的……离输入/输出最远的策略——高层策略——一般变更没有那么频繁……通过将策略隔离,并让源码中的依赖方向都统一调整为指向高层策略,我们可以大幅度降低系统变更所带来的影响。