读书笔记:架构整洁之道

Posted by Shoukai Huang on December 18, 2018

第一部分 概述

设计(Design)与架构(Architecture)区别是什么?

一丁点区别都没有!

“架构”这个词往往使用于“高级层”的讨论中,这类讨论一般都把“底层”细节排除在外。而“设计”一词,往往用来指代具体的系统底层组织结构和实现细节。但是,从一个真实的系统架构师的日常工作来看,这样的区分是根本不成立的。

第二部分 编程范式

  • 结构化编程是对程序控制权的直接转移的限制;
  • 面向对象编程是对程序控制权的间接转移的限制;
  • 函数式编程是对程序中赋值操作的限制;

第三部分 设计原则

SOLID设计原则

SRP(单一职责原则):

每个软件模块都有且只有一个需要改变的理由。

适用范围:方法、类、接口、包、模块、应用(应用的职责)、系统(业务系统的边界)

OCP(开闭原则):

核心要素是:如果软件系统想要更容易被改变,那么其设计就必须允许新增代码来修改系统行为,而非只能靠修改原来的代码

LSP(里氏替换原则):

如果想用可替换组件来构建软件系统,那么这些组件必须遵守同一个约定,以便让这些组件可以相互替换。

软件架构层面,一旦违背了可替换性,该系统架构就不得不为此增添大量复杂的应对机制。

ISP(接口隔离原则)

主要告诫软件设计师应该在设计中避免不必要的依赖。 任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦

DIP(依赖反转原则):

高层策略性的代码不应该依赖实现底层细节的代码,洽洽相反,那些实现底层细节的代码应该依赖高层策略性的代码

第四部分 组件构建原则

构建组件相关原则

REP(复用/发布等同原则)

软件复用的最小粒度应等同于其发布的最小粒度。

CCP(共同闭包原则)

我们应该将那些同时修改,并且为相同目的而修改的类放到同一个组件中,而将不会同时修改,并且不会为了相同目的而修改的哪些类放到不同的组件中。

CRP(共同复用原则)

不用强迫一个组件的用户依赖他们不需要的东西。

组件之间关系原则

ADP(无依赖环原则)

组件依赖关系图中不应该出现环

SDP(稳定依赖原则)

依赖关系必须要指向更稳定的方向

SAP(稳定抽象原则)

一个组件的抽象化程度应该与其稳定性保持一致

第五部分 软件架构

整洁架构

依赖关系规则

越靠近圆心即越是稳定的,即代表高层策略,越外围表示是低层组件,

源码中的依赖关系必须只指向同心圆的内层,即由底层机制指向高层策略

  • 业务实体层:包含业务实体,即应用的业务对象,封装最通用最高层的业务逻辑(单独某个业务实体的逻辑),它不应该受外界影响
  • 用户用例层:实现用户某个用例场景的业务逻辑封装,是对业务实体的组装、封装
  • 接口适配层:目的是进行数据的交换,包含有网关、控制器、展示器, 如:实体层和用户实例层使用的数据转化成为持久层能使用的数据,比如数据库
  • 框架与驱动层:包含数据库、用户界面、web框架等

参考