介绍:
《架构整洁之道》 作者 Bob大叔(RObert C Martin),整书划分为6个部分。首先对架构进行描述到第二部分的编程范式,接着又以一些示例讲述第三部分的设计原则(SOLID)。然后就是组件的划分,期间介绍了很多使用的组件划分原则。
第五部分就是比较深入的软件架构部分,由于前面4部分的基础铺垫,这部分讲的软件架构就比较容易吸收。
最后就是Bob大叔的工作中关于软件架构的实现细节。
为什么分享
在读此书过程中,尤为缓慢。一部分原因是自己懒,另一部分是自己吸收得比较慢。幸运的是,我在这期间有简单地做笔记。现在,我想从新整理这些笔记也将其分享给大家。若有任何不对,请指出。感谢!
笔记
第1 部分 - 概述
第一章 架构与设计究竟是什么
软件架构的终极目标是,用最少的人力成本满足构建和维护该系统的需求。
-
提升软件架构质量,先知道什么是优秀软件架构
-
为减少构建成本采取不同系统架构提升生产力,先了解不同系统架构的各种属性与成本和生产力的关系。
第二章 两个价值维度
软件系统有以下两个价值维度可以衡量
-
行为价值
行为价值是指软件运行时所创造的价值,这是最直观的。所以,当这个系统不可以运作了,这个行为价值也就变成0
-
架构价值
为了利于后期系统变更难度降低而体现出来的价值。系统应该是灵活的,而不是固定死某个形态。这很依赖于我们的架构设计。变更实施的难度应该与范畴成等比关系,而与变更的形状无关。
豪威尔矩阵分析
紧急的难题永远是不重要的,重要的难题是不紧急的。—— 艾森豪威尔(美国前总统)
根据豪威尔矩阵我们可以划分一下优先级:
-
系统行为(行为价值):是紧急的,但是不是特别重要。
-
系统架构(架构价值):是重要的,但是不是特别紧急。
重要程度排序: A重要紧急 B重要不紧急 C紧急不重要 D不紧急不重要
结论:系统架构显然是研发人员的工作职责。如果忽视软件架构的价值,系统将会难以维护。
目标:创建出功能实现更容易、修改起来更简单、扩展更加轻松的软件架构。
第2 部分 - 编程范式
第三章 编程范式总览
-
结构化编程:对程序控制权的直接转移进行了限制和规范。(1968)
-
面向对象编程:对程序控制权的间接转移进行了限制和规范。(1966)
-
函数式编程:对赋值进行了限制和规范。(1958)
结论:范式都是限制我们做什么,我们不能做什么而不是可以做什么。
第四章 结构化编程
-
结构化编程可以将模块拆分成单元,将一个大型问题拆分成一系列高级函数的组合,又将高级函数拆分成一系列低级函数。
-
测试只能展示bug的存在,并不能展示bug。测试相当于一个证伪的过程。
-
功能性拆分仍然是最佳实践之一。
第五章 面向对象编程
-
面向对象最重要的特性是多态,强大的多态特性使程序的间接控制权进行了约束。
-
依赖反转:依赖关系方向和控制流正好相反,就称之为依赖反转。源码上主要依靠面向接口编程实现。这也是软件架构层面,面向对象编程这种范式的核心。
-
面向对象编程中以多态属性让依赖反转,实现某种插件式的架构,让高层策略性组件和底层的实现性组件分离。底层组件可以被编译成插件,实现独立于高层组件的开发和部署。
第六章 函数式编程
-
对于函数式编程来说,变量初始化之后就不会被修改了。它的变量是不变的。
-
不可变性与软件架构:如果变量永远不会被更改,就不可能产生竞争或者并发问题。如果锁的状态是不可变的,那就不会产生死锁。
-
要点:一个架构设计良好的应用程序应该将状态的修改部分和不需要修改的部分隔离成单独的组件,然后用合适的机制来保护可变变量。
-
软件架构师应该着力将大部分逻辑都归于不可变组件中,可变的状态组件的逻辑应该越少越好。
-
事件溯源:只存储事务记录,不存储具体状态。当需要具体状态的时候,我们只需要从头开始计算所有的事务即可。
-
结构化编程是对程序控制权的直接转移进行了限制。
-
面向对象编程是对程序的控制权的间接转移进行了限制。
-
函数式编程是对程序中赋值操作的限制
-