《架构整洁之道》第 8 章 OCP:开闭原则

均为原创,读架构整洁之道的笔记。

包含了部分自己的理解,包含了原书中至少70%的知识点。
完整笔记,各位老哥友链加起来吧。
我的博客地址:www.yuque.com/_huangkuan


开闭原则:(OCP :Open Closed Principle)。

一个设计良好的系统,应该在不需要修改,或者修改很少的前提下,就能够完成扩展功能。

思想实验

场景

假设有一系统。需要在Web上展示财务数据,页面是可以上下拉的,负数值展示为红色。接下来需求方又提出需求,需要将该数据打印出来,每一页有表头和页码,负数值用括号标识。

可以看出,该系统的数据是一致的,只是展现方式有所不同。

数据流

利用SRP原则,可以得出以下数据流:

组件分类

一共五个组件:

书中原图:用<I>标记的是接口,<DS>为数据结构。开放箭头为使用关系,闭合箭头代表实现和继承关系。

可以看出,模块与模块,通过接口隔离后,可以做到底层级模块修改后,并不会影响到高层级,底层级更方便做切换了。

还可以看出,模块A通常实现了上一层级模块中的接口。如ScreenPresenter类实现的是Controller层中的接口(依赖反转)。

这么做的目的是为了让Presenter层的变动,不影响到Controller层。而Interactor是最负责OCP的,其他模块的修改变动都不会影响到它。这是因为Interactor通常是最核心的,属于业务相关,其他都是辅助模块。

并且组件与组件之间的关系都是单向的。

信息隐藏

可以看到,Controller层,使用到了Interactor的两个数据结构分别是请求和响应,这个本意是想让Controller不过渡依赖Interactor的细节,为了让Interactor屏蔽掉发生在Controller上的变动。

本章小结

OCP主要是让系统便于扩展,限制每次修改所影响的范围。实现方式是划分组件,按照依赖关系进行组织,使得高阶组件不会因为低阶组件的修改而受到影响。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!