《架构整洁之道》第 19 章 策略与层次

2023-06-05 08:29:27 浏览数 (3)

本质上所有软件系统就是一组策略语句的集合。每一段代码都是策略。软件架构设计的重点工作之一就是,将这些策略彼此分离,然后按照变更要求进行分组。其中变更原因,频率层次相同的策略应该被分到一个组件中。反之,就不该放到一个组件中。

层次(Level)

我们对层次,是严格按照输入与输出之间的距离,来定义的。也就是说,一条策略的距离系统的输入/输出越远,那么它的层次就越高。直接负责输入输出的,是最低。

举例:

输入一串字符,通过查表法转换这些字符,然后输出。数据流向实线,依赖关系虚线。

上图中,Translate就应该是层次最高的组件,因为离输入输出最远。可以看到,数据流向,和依赖关系的方向并不一致。因为我们希望流向和依赖脱钩,但要在组件层次上挂钩。

如果我们将代码写成这样,就是一个错误的架构,因为高层次组件依赖了低层次组件。

代码语言:javascript复制
function encrypt(){//高层次组件,Translate
  while(true){
    writeChart(translate(readChart()));//低层次组件writeChart,readChart。
  }
}

好的架构应该如下图:使用接口隔离解耦。ConsoleReaderConsoleWriter都是具体实现类,属于低层次组件。这两个具体实现类,都形成了对高层次组件的插件,高层次组件可以不知道具体实现类,而实现类依赖于高层次组件

本章小结

实际上这个案例,简单的体现了单一职责原则(SRP),开闭原则(OCP),共同闭包原则(CCP),依赖反转原则(DIP),稳定依赖原则(SDP),稳定抽象原则(SAP)。

1 人点赞