读《架构整洁之道》
《架构整洁之道》这本书,是读完《代码整洁之道》后添加进书架的。加入书架看六七章停下来,一放半年,终于在上个月将其完整过一遍;全书18万字,过完耗时8小时40分钟。
这本书,对我来说是比较难的,放着半年便是例证——看不太懂或是不太想看的书我都先放一边。
本书难点在于,如何将抽象的架构术语与具象的代码表现结合到一起?书中的很多专业名词,对我来说,是比较难以理解的,比如依赖反转、谦卑对象等。
一、全书结构
抛开具体细节先不谈,让我先聊一聊全书的“架构”。整本书,被作者分为6个部分:
- 概述
- 编程范式
- 设计原则
- 组件构建原则
- 软件架构
- 实现细节
第一部分是“概述”,介绍了“设计”“架构”是什么,“设计”与“架构”是同一个概念,它们都是“一系列决策组成的连续体”。(此处“一系列决策组成的连续体”便是阅读难点之一,句子中的“连续体”让人摸不着头脑。)
总之,软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。在软件开发中,我们不能忽视软件架构的价值,它决定了系统的可维护性与可迭代性。
书中第二部分介绍的是3种编程范式:
- 结构化编程
- 面向对象编程
- 函数式编程
这部分内容,是很好理解的。编程范式的存在,是为了限制和规范程序员的能力,是为了告诉我们不能做什么(而不是可以做什么)。
第三部分介绍的是5种设计原则:
- 单一职责原则
- 开闭原则
- 里氏替换原则
- 接口隔离原则
- 依赖反转原则
这些原则的设计,在我理解,依然是对程序员能力的限制,通过遵守这些原则,让我们写出更易于迭代的系统。
第四部分是组件构建原则。组件是什么?组件是软件的部署单元,是整个软件系统在部署过程中可以独立完成部署的最小实体。本部分主要讲的是组件之间的依赖关系应该如何梳理:组件之间是不应该有依赖环存在的,依赖关系必须要指向更稳定的方向等等。
第五部分是软件架构,也是全书最长的一部分。明确编程范式、设计原则以及组件关系之后,我们就可以谈架构了,这一部分将架构拉回到我能理解的层次。
架构是什么?
架构是:将系统规划成组件,并安排好组件之间的排列关系,以及组件之间互相通信的方式。
这一部分很多章节讨论的重点,都是“边界”的切分。
书中第六部分,讨论的是实现细节。当使用架构师思想思考问题时,数据库、Web、应用程序框架等等那些我们耳熟能详平日接触最多的内容,都只是实现细节,是可以被另外的内容替代的。
二、读书感悟
以上是全书的大体内容。
《架构整洁之道》这本书,我于一个月前看完,拖到现在才写读书笔记,是因为看完当时不知道如何完成读书笔记。
我不太理解架构是什么。
现在完成这读书笔记,也并非意味着只一个月,我便想清楚了架构的意义,我只是在逼自己做出总结。通过总结,让自己对“架构”想得多一些。
架构是什么呢?
在我理解,架构是一种清晰划分系统组件(模块)的方法,它的基础是整洁代码,当我们想要敲出更易理解代码、更易迭代系统时,我们便已经在考虑架构了。架构,是分层(比如MVC),然后分模块(比如功能一、功能二)。
本书的附录部分,列举了本书作者马丁大叔的部分项目经历。马丁大叔从1970年开始做项目直到现在,拥有50多年编程经验。在他的编程生涯中,他持续总结自己的经验,整理出《代码整洁之道》《架构整洁之道》等经典书籍。
通过这些书(前人经验),再结合自己的工作经验,我意识到敲代码这件事,其实在两个层次上是不变的。
一是计算机的底层设计,晶体管、处理器、内存、指令执行流水线,这些是不会变的(我还没有了解过量子计算机是如何实现的);二是在架构设计上,所有的软件系统,大到操作系统,小到加法计算器,都是分层分模块的,这种设计思路,也是不变的。
意识到这种不变,对我来说,是一种激励:持续学习持续整理,认清事物的本质,是可以像马丁大叔一样,不落后于时代的。
三、摘抄
书中有许多句子,是我会常常回看的,于是摘抄部分于此处:
这和现代软件研发工作有点类似,现在的软件研发工程师都有点过于自信。哦,当然,他们确实不会偷懒,一点也不。但是他们真正偷懒的地方在于——持续低估那些好的、良好设计的、整洁的代码的重要性。
这些工程师们普遍用一句话来欺骗自己:“我们可以未来再重构代码,产品上线最重要!”但是结果大家都知道,产品上线以后重构工作就再没人提起了。市场的压力永远也不会消退,作为首先上市的产品,后面有无数的竞争对手追赶,必须要比他们跑得更快才能保持领先。
所以,重构的时机永远不会再有了。工程师们忙于完成新功能,新功能做不完,哪有时间重构老的代码?循环往复,系统成了一团乱麻,生产效率持续直线下降,直至为零。
通常来说,要想构建一个好的软件系统,应该从写整洁的代码开始做起。毕竟,如果建筑所使用的砖头质量不佳,那么架构所能起到的作用也会很有限。反之亦然,如果建筑的架构设计不佳,那么其所用的砖头质量再好也没有用。
首先,软件架构师自身需要是程序员,并且必须一直坚持做一线程序员,绝对不要听从那些说应该让软件架构师从代码中解放出来以专心解决高阶问题的伪建议。
四、推荐语
本书的推荐语为:“作为程序员,在我们的编程生涯中,总是会需要修改自己或是他人代码的。如何能够让这些修改能够更容易更自然,可以从两方面着手,一是写出更易懂的代码;二是在写代码之前,想想看系统应该如何拆分。
“系统如何拆分?试试看《架构整洁之道》,书里面是有思路的。”