如果只允许我推荐一本和软件架构有关的经典著作,我一定会毫不犹豫地推荐Rober Martin也就是我们常说的Bob大叔的《整洁架构之道》。
我自己的著作《解构领域驱动设计》也参考了本书的核心内容,将整洁架构与领域驱动设计的限界上下文结合起来,提出了菱形对称架构。
Bob大叔认为:“它们(指六边形架构和DCI架构等)都具有同一个设计目标:按照不同关注点对软件进行切割。也就是说,这些架构都会将软件切割成不同的层,至少有一层只包含该软件的业务逻辑,而用户接口、系统接口则属于其他层。”
我在书中以此为依据,写道:“限界上下文同样是对软件系统的切割,依据的关注点主要是根据领域知识的语境体现业务能力的差异。在限界上下文内部,我们又可以针对限界上下文进行关注点的切割,体现清晰的层次结构。这个层次结构必须遵循整洁架构(Clean Architecture)的思想。”
菱形对称架构其实就是整洁架构的一种具体呈现。
可以说,整洁架构指导了这一模式在限界上下文内部运用的代码结构,也指导了限界上下文该如何正确地协作。
Bob大叔的这本经典著作并非上述一张整洁架构图所能穷尽,单单以“边界”为例,本书就用了详尽的两章内容来阐述。随着我参与架构设计的项目越多,我越发认识到边界的重要性。控制架构边界,成了架构师的重要责任之一,正如控制团队职责边界是项目管理者的重要责任之一。如果遵循康威定律,实际上,架构师也需要合理地控制团队职责边界。
什么是边界?Bob大叔用艺术化的语言来定义边界:
软件架构是绘制线条的艺术,我称之为边界。这些边界将软件元素彼此分开,并限制了一侧软件元素对另一侧的了解程度。 整洁架构之道
我对领域驱动设计的认识,就是对边界控制的一以贯之。我认为:“无论从问题空间到解空间,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的界定与控制。”
分析边界的两重边界
设计边界的四重边界
即如下图所示的内容:
认识到边界控制的重要性,只是让你对架构设计的价值和目标有了清晰的认识,但更重要的是该如何绘制你的边界。我就不继续剧透了,自行阅读《整洁架构之道》第17章《划分边界》,相信能找到满意的答案。
我在第一次阅读到Bob大叔的《代码整洁之道》时,给我的感受是一种震撼,以至于惊呼:“原来代码可以这样写,竟然可以如散文一般优雅!”
当我第一次阅读到同属于整洁系列的《整洁架构之道》时,我产生了一种后悔莫及的惋惜,其中又夹杂亡羊补牢的庆幸。惋惜在于:如果我能在更早时间读到本书,我能少走多少弯路啊!庆幸在于:总算读到了,我还来得及补救,来得及成为一名“整洁”的架构师!