均为原创,读架构整洁之道的笔记。
开闭原则:(OCP :Open Closed Principle)。
一个设计良好的系统,应该在不需要修改,或者修改很少的前提下,就能够完成扩展功能。
思想实验
场景
假设有一系统。需要在Web上
展示财务数据,页面是可以上下拉的,负数值展示为红色。接下来需求方又提出需求,需要将该数据打印出来,每一页有表头和页码,负数值用括号标识。
可以看出,该系统的数据是一致的,只是展现方式有所不同。
数据流
利用SRP原则,可以得出以下数据流:
组件分类
一共五个组件:
书中原图:用<I>
标记的是接口,<DS>
为数据结构。开放箭头为使用关系,闭合箭头代表实现和继承关系。
可以看出,模块与模块,通过接口隔离后,可以做到底层级模块修改后,并不会影响到高层级,底层级更方便做切换了。
还可以看出,模块A
通常实现了上一层级模块中的接口。如ScreenPresenter
类实现的是Controller
层中的接口(依赖反转)。
这么做的目的是为了让Presenter
层的变动,不影响到Controller
层。而Interactor
是最负责OCP
的,其他模块的修改变动都不会影响到它。这是因为Interactor
通常是最核心的,属于业务相关,其他都是辅助模块。
并且组件与组件之间的关系都是单向的。
信息隐藏
可以看到,Controller
层,使用到了Interactor
的两个数据结构分别是请求和响应,这个本意是想让Controller
不过渡依赖Interactor
的细节,为了让Interactor
屏蔽掉发生在Controller
上的变动。
本章小结
OCP
主要是让系统便于扩展,限制每次修改所影响的范围。实现方式是划分组件,按照依赖关系进行组织,使得高阶组件不会因为低阶组件的修改而受到影响。