专栏名称: 逸言
文学与软件,诗意地想念。
目录
相关文章推荐
程序员的那些事  ·  世界上最伟大最邪恶的软件发明,超过 10 ... ·  3 天前  
程序猿  ·  真cv工程师 ·  1 周前  
51好读  ›  专栏  ›  逸言

如果只允许我推荐一本架构经典著作,我会毫不犹豫推荐它

逸言  · 公众号  · 程序员  · 2024-11-19 12:34

正文

如果只允许我推荐一本和软件架构有关的经典著作,我一定会毫不犹豫地推荐Rober Martin也就是我们常说的Bob大叔的《整洁架构之道》。

没有什么东西是永恒不变的,在架构领域,唯一不变的是经典的架构原则,也就是作者自己在前言中提到的“那些永恒、不变的规则”。
本书书名虽然框定为“架构(Architecture)”,但实则覆盖了软件开发的方法面面,包括编程范式、设计原则、组件原则,当然核心还是架构。
我强烈建议初入行的菜鸟们一定要阅读本书,虽然没有项目研发经验的你们未必能完全读懂书中的大部分内容,它却可以给你指明一个清晰且正确的努力方向与发展目标。
那些在项目中摸爬滚打了多年的老手们,有一些人自诩架构能力了得,殊不知因为过于执着纷繁复杂的技术细节,从一开始就走错了路,更有甚者,他们却将这些错误的认识无私地“传承”给了手下的新手们,真可以说是毁人不倦!若他们能回归空杯心态,静下心来读读本书,相信能正本清源,回归架构的初心。
本书的核心当然是Bob大叔一力提倡的整洁架构思想,如下图所示:
这真是高度抽象之架构原则的可视化呈现,它体现的核心思想可以囊括我们常见的架构模式,如六边形架构、DCI架构、洋葱架构,也可以有效地指导分层架构模式。

我自己的著作《解构领域驱动设计》也参考了本书的核心内容,将整洁架构与领域驱动设计的限界上下文结合起来,提出了菱形对称架构

Bob大叔认为它们(指六边形架构和DCI架构等)都具有同一个设计目标:按照不同关注点对软件进行切割。也就是说,这些架构都会将软件切割成不同的层,至少有一层只包含该软件的业务逻辑,而用户接口、系统接口则属于其他层。

我在书中以此为依据,写道:“限界上下文同样是对软件系统的切割,依据的关注点主要是根据领域知识的语境体现业务能力的差异。在限界上下文内部,我们又可以针对限界上下文进行关注点的切割,体现清晰的层次结构。这个层次结构必须遵循整洁架构(Clean Architecture)的思想。

菱形对称架构其实就是整洁架构的一种具体呈现。

可以说,整洁架构指导了这一模式在限界上下文内部运用的代码结构,也指导了限界上下文该如何正确地协作。

Bob大叔的这本经典著作并非上述一张整洁架构图所能穷尽,单单以“边界”为例,本书就用了详尽的两章内容来阐述。随着我参与架构设计的项目越多,我越发认识到边界的重要性。控制架构边界,成了架构师的重要责任之一,正如控制团队职责边界是项目管理者的重要责任之一。如果遵循康威定律,实际上,架构师也需要合理地控制团队职责边界。

什么是边界?Bob大叔用艺术化的语言来定义边界:

软件架构是绘制线条的艺术,我称之为边界。这些边界将软件元素彼此分开,并限制了一侧软件元素对另一侧的了解程度。
整洁架构之道

我对领域驱动设计的认识,就是对边界控制的一以贯之。我认为:“无论从问题空间到解空间,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的界定与控制。”

整个领域驱动设计可以体现为:
  • 分析边界的两重边界

  • 设计边界的四重边界

即如下图所示的内容:

认识到边界控制的重要性,只是让你对架构设计的价值和目标有了清晰的认识,但更重要的是该如何绘制你的边界。我就不继续剧透了,自行阅读《整洁架构之道》第17章《划分边界》,相信能找到满意的答案。

我在第一次阅读到Bob大叔的《代码整洁之道》时,给我的感受是一种震撼,以至于惊呼:“原来代码可以这样写,竟然可以如散文一般优雅!”

当我第一次阅读到同属于整洁系列的《整洁架构之道》时,我产生了一种后悔莫及的惋惜,其中又夹杂亡羊补牢的庆幸。惋惜在于:如果我能在更早时间读到本书,我能少走多少弯路啊!庆幸在于:总算读到了,我还来得及补救,来得及成为一名“整洁”的架构师!