总体评价

这本书是我看过的架构领域的书中最好的一本,“神书”,作者比较系统的阐述了自己对架构的理解、对好的架构的理解、以及对如何做出好的架构设计的理解。作者本人在软件领域从业几十年,从他的口中听到的一些架构原则更透彻,能让你看到当时的来龙去脉。

阅读感悟

  • 依赖倒置(DIP)本质上是一种解耦,解耦的目的是实现组件化的独立部署和独立开发能力。PS:顺便说一句,最早提出DIP原则的就是这本书的作者罗伯特老爷子。

  • 所有的竞争问题、死锁问题、并发更新问题都是由可变变量导致的。如果变量永远不会被更改,那就不可能产生竞争或并发更新问题。如果锁状态是不可变的,那就永远不会产生死锁问题。所以架构师要做好可变性的隔离,区分出可变组件和不可变组件,尽可能的将处理逻辑归于不可变组件。

  • 软件构建中层结构的主要目标是:第一、使软件可容忍被改动;第二、使软件更容易被理解;第三、构建可在多个系统中复用的组件。

  • SRP是康威定律的一个推论,即软件应与组织息息相关,每一个软件模块应该只对某一类行为者负责。单一职责原则放到组件层面就是共同闭包,即我们应该将会同时修改,会以同样目的而被修改的类整合成一个组件。

  • OCP是指当新增功能时可以通过增加新代码而非修改旧代码来实现。

  • 软件复用的最小粒度应该等同于软件发布的最小粒度。PS:有些研发组织以系统的形式发布软件,却期望各个系统去共享使用通用的功能,最后只能是一团糟。

  • 不要依赖不需要用到的东西,换言之,在设计组件时,应考虑这些类是被共同复用的吗?PS:难

  • 不要出现依赖环,否则会影响开发效率。依赖环的消除可以使用依赖倒置来解决。

  • 组件是不可能从上到下被设计出来,因为组件体现的不仅是业务功能而是构建性、维护性、依赖关系的地图。PS:很反直觉,有待体验

  • 不稳地的组件可以依赖稳定的组件,而不能让稳定的组件依赖不稳定的组件。一个组件的抽象化程度应该与其稳定性保持一致,就是说稳定的应该抽象,否则无法满足开闭原则。不稳定的应该包含实现代码,这样才方便修改。

  • 软件架构的终极目标是最大化程序员的生产力,同时最小化系统的总运营成本。

    • 好的软件架构应该是团队的组织架构相适应,方便开发团队开发
    • 好的软件架构要考虑到方便部署
    • 好的软件架构应该使开发人员对软件运行过程一目了然
    • 好的软件架构应该便于维护
    • 好的软件架构应该保留更多的(有意义的)可选性
  • 一个系统在水平分层上比较常见的方式是:UI界面、应用独有的业务逻辑、领域普适的业务逻辑、数据库。

  • 划分边界的目的是方便我们尽量将一些决策延后进行。

  • 计算机程序从本质上说就是一组仔细描述如何将输入转化为输出的策略语句的集合。软件架构设计的工作重点之一就是将这些策略彼此分里,然后将他们按照变更的方式进行重新分组。变更原因、时间和层次相同的策略应该被分到同一个组件中。

  • 一种策略距离系统的I/O越远,它所属的层次就越高。高层次的策略不应该依赖于低层次的策略。PS:有道理

  • 业务逻辑是与技术无关的,是现实中某一项业务的一部分。业务实体就是业务逻辑业务数据的组合。

  • 架构设计的核心目标:满足用例,并能将它们与周边的因素隔离。

  • 整洁架构:越内层层次越高。外层圆代表的是机制,内层圆代表的是策略。源码中的依赖关系必须只指向同心圆的内层,即由低层机制指向高层策略。PS:这就是整本书的核心了,也是罗伯特老爷子的核心主张。在这个框架中,业务实体应该是最不容易发生变动的。

  • 每个系统架构的边界处,都应该多使用谦卑对象模式,即只发挥自己的桥梁和通信作用,并不从中干预信息的传输。

书籍信息

中文书名:架构整洁之道
英文书名:Clean Architecture
作者:[美] Robert C. Martin
译者:孙宇聪