《阅读者》第20期:架构模式的圣经

2024-05-01 16:38

本文主要是介绍《阅读者》第20期:架构模式的圣经,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提及模式,开发人员的第一反应一定是GOF的《设计模式》。毫无疑问,这本软件领域的经典著作已经深入人心,差不多可以说是设计模式的圣经了。书中的23种模式已经成为开发者之间进行交流的术语,使用它们甚至像使用语言中的惯用法一般自然。然而,事实上,在模式领域里,还有一部伟大著作给予软件设计领域带来的影响同样的大,那就是以德国人Frank Buschmann为主要贡献者的《面向模式的软件架构》(Pattern-Oriented Software Architecture)系列。相对于《设计模式》而言,我以为这一系列可以称之为是架构模式的圣经。

这一套煌煌巨著一共分为五卷,其中第一卷《面向模式的软件架构:模式系统》(Pattern-Oriented Software Architecture Volume 1:A System of Patterns)的出版日期为1996年8月,最后一卷《面向模式的软件架构:模式语言》(Pattern-Oriented Software Architecture Volume 5:On Patterns and Pattern Language)则出版于2007年5月,也即是说整个系统从创作到出版跨度长达十余年的时间,单以这一点来说,本书的作者们,尤其是主要贡献者Frank Buschmann的毅力值得钦佩。

与《设计模式》不同,本系列主要的关注点放在了架构层面。根据Richard Helm(GOF之一)对设计的划分,这些内容应属于宏观架构(macro-architecture)的部分,可以作为处于微观架构(micro-architecture)中的《设计模式》的有力补充。正因为此,阅读这一系列须得有足够的架构经验或基础,才能有所收获,而如此多卷的大部头著作,也是许多人望而却步的主要原因。

为了对架构以及架构模式有更深入的理解,我曾硬着头皮、下定决心、不辞万难地啃完了这个系统的三卷,分别为第1、3、4卷。在我未来的阅读计划中,本系列的第二卷是我必须要阅读的。关于第五卷《模式语言》,窃以为更多地是偏向理论介绍,大可以忽略不计。因此,以我的阅读经验来看,自认为有几分资格来谈谈我的阅读体验。

这个系列虽然都是讲解架构模式,但各有其特色,关注点也有不同。整体说来,第一卷《模式系统》介绍的内容更为宽泛而通用,书中讲解的各种架构模式也已得到了足够广泛的普及,例如大家耳熟能详的Layer 、MVC以及Pipes And Filters模式,都在本书进行了深入的讨论。当然,准确说来,本书涵盖的内容其实涉及到模式的各个方面。作者将模式分为三个层次,分别为架构模式、设计模式与惯用法(Idioms)。前面提及的模式就属于架构模式的类别,除了这三种模式之外,Broker模式、Presentation-Abstraction-Control模式以及Microkenel模式,对于我们进行软件架构活动而言,都有非常重要的参考价值。至于书中的设计模式部分,可以看做是《设计模式》的延续,有的模式表达的思想本质与GOF的《设计模式》完全一致,只是在命名上略有不同。例如Whole-Part模式与GOF的Composite模式,Publisher-Subscriber模式与GOF的Observer模式都有着千丝万缕的关系。书中还提到了《设计模式》所未曾涵盖的内容,如Forwarder-Receiver模式与Master-Slave模式,以及Client-Dispatcher-Server模式,都非常有用,尤其可以运用在并发场景或分布式场景中,这正是GOF《设计模式》较少提及的内容。

我虽然未曾阅读本系列的第二卷,但仍然粗略的翻看过,其中讲到的诸如Reactor模式、Active Object模式与Leader-Follower模式等,都曾经有过深入了解并在项目中运用过。该书的主题是用于并发和网络化对象的模式,这对于真实的大型应用系统而言非常重要,却又是我们在系统设计中最常面对的难题。本书的介绍与讲解方式完全延续了第一卷的风格,既有理论阐述,又有案例详解,同时又保持了一贯严谨的学术风格。

本系列的第三卷是唯一没有Buschmann参与的一本,也是最薄的一本,但书中讲解的概念却同样关键。该书主要介绍了与资源管理相关的模式,例如Lookup模式、Lazy Acquisition模式与Caching模式,以及Pooling模式等。关于资源管理的相关问题,事实上在企业应用系统中相当普遍,无论是硬件资源、网络资源还是其他外部资源,从性能、可重用性与可扩展性角度来看,都是值得关注的。这其中很多模式也得到了广泛地运用。例如Java中的JNDI就采用了类似Lookup模式的设计,Lazy Acquisition模式也在诸多框架例如Hibernate与Spring等得到运用。Leasing模式在WCF或早期的.NET Remoting中也得到了有效运用。

第四卷虽然名为《分布式计算的模式语言》,但事实上可以看作是一本模式目录,因为本书涉及到的模式一共包含了114种模式,这其中还没有计算参考到的另外150多种模式。形象地说,本书好像是模式大观园,其中的风景可以说是美不胜收。然而,正是因为美丽的景点实在太多,就很容易导致风景的欣赏者开始走马观花,最后充斥在脑海中的不过是肤浅的一堆表面印象而已。粗略看来,由于要介绍的模式太多,而书的容量有限,导致许多模式的介绍只能浅尝辄止。我不否认这确乎是事实,但另一方面,本书对模式的这些描述言简意赅,背后包含的思想与意义,却又值得我们反复思索。例如,本书将Domain Object模式描述为:“将自我完备的连贯功能和基础性责任封装成定义良好的实体,通过一个或多个Explicit Interface提供功能,并隐藏内部结构和实现。”在这个描述中,所谓的“自我完备”一词就值得我们反复玩味,若能充分地体会到封装的意义与面向对象的本质,当阅读到这个词语时,定能会心微笑,犹如遇见知音一般的快乐。

面对这样一套浩如烟海的著作,我们该怎样阅读,才能攻克架构模式这座堡垒呢?在阅读到第4卷时,通过回应前面几卷的内容,给了我一个很好的提示。我认为,最好的阅读方法就是《如何阅读一本书》中提到的主题阅读(Syntopical Reading)方式,即通过确定主题相关性,定位到相关章节,广泛查阅资料,汲取与主题相关的知识营养,进而深入地分析这个主题的方方面面。本系列的第四卷就起到了很好地提纲挈领的作用。如果大家希望阅读这一系列,并能在阅读之后真正有所收获,我建议的阅读顺序为:首先阅读本系列第一卷,其目的在于对模式(架构模式、设计模式与惯用法)与模式系统有一个初步的认识,可以算作是登堂入室的第一步。没有踏出这第一步,就很难谈得上你能够很好地理解架构模式。这一步骤可以是一个快速浏览的过程。正如陶渊明所言“好读书,不求甚解”,此次阅读完全可以遵循这七字法则,不必深入理解书中讲解的每个模式。阅读时不能理解的,可以暂时搁置在一边。

有了第一遍的基础,就可以翻开第四卷,开始真正的模式之旅了。本书有价值的内容全部都放在了《第二部分 模式故事》与《第三部分 模式语言》中。当然,如果你希望了解什么是分布式系统,也可以快速阅读第2章的内容。本书的第5章《基线架构》写得非常漂亮,极好地表现了作者非凡的写作功底与扎实的技术功底,这是我读过的除了《企业应用集成模式》第一章《运用模式解决集成问题》与《设计模式》第二章《实例研究:设计一个文档编辑器》之外,将理论与实际案例结合得最好的一章。事实上,这个案例应该是从第四章开始,简略地介绍了整个案例的需求,然后就从架构环境,层次分解,领域层,分布式通信,用户界面,功能分布,并发处理,数据持久化等诸多方面,层层递进地勾勒出整个仓库管理流程控制系统的架构过程,且非常完美地嵌入了本书所要讲解的主要模式。因此,用这个案例来开始你的模式之旅,就让自己现在走的一步站在了更高的起点上。

将如此众多的内容浓缩到这一章中,必然会产生阅读障碍。没有关系,你可以默念“不求甚解”的真言进行你的阅读,它可以给你心灵上极大的安慰与自信,使得你不至于在面对困难与挫折时,直接缴械投降。这确实需要足够的信心才能让自己不至于中途放弃,因为这样磕磕巴巴的阅读之旅,会一直持续到第7章《仓库拓扑》,你才可以停下来喘一口气(事实上,从第4章一直到第7章,才算完整地介绍完整个项目案例的架构设计与分析)。

休息好了吗?收拾好心情,活动活动疲惫的双脚,做好继续迎面困难的准备吧。因为前方还有无穷多的高峰和险峰在等着你去征服呢。从本书的第三部分开始,你就进入了模式语言的世界中,希望你能保持足够的清醒,不要在模式语言中迷了路。在这个环节中,我认为最好的阅读方式应该是一种“超链接阅读”方式,简言之,就是以本书为纲,开展纵向和横向的阅读,就像浏览网页时不停地点击超链接了解相关知识一般。你需要准备足够多的资料,包括本系列的前面三卷以及其他相关书籍。

举例说来,当我们阅读到第9章介绍的Domain Model模式时,你绝对不能仅满足于本书的内容,而应该在阅读完本书对该模式的介绍后,再去翻阅Martin Fowler的著作《企业应用架构模式》,找找看Martin对Domain Model是怎样描述的。又例如在阅读到第10章的Message Endpoint模式时,可以翻阅《企业应用架构模式》第3章中对该模式的介绍。阅读到本书第15章的Leader/Followers模式时,应查阅《面向模式的软件架构》第二卷第5章的内容。如果你仍然没有很好地理解,你还可以通过本书提供的参考文献获取相关知识,又或者通过互联网搜索相关的文档。而这正是所谓“主题阅读”的阅读形式,严格地讲,它更像是一种学术研究,通过延伸与比较的阅读,彻底明白每一个知识主题。

当把这些模式(当然,你也可以只选取你感兴趣或认为重要的模式)全部吃透之后,或许光阴已经飞逝一年或者二载。不管怎样,通过这种精读的形式,并结合自己项目中的经验与收获,你已经在架构模式之旅中行进到足够远的距离了。此时的你可以再回过头来通读本系列的第一卷,以及第四卷,特别包括第四卷的第二部分,你一定会产生豁然开朗的感觉。

会否觉得这是艰辛而又漫长的旅程呢?既然你已经选择了走上软件开发的道路,在希望提升自己的前提下,就一定做好了这样的准备。与其临渊羡鱼,不如退而结网,最重要的不是学习方法,而是执行力。即使是最美好的学习方法,如果没有执行,仍然是镜花水月。倘若是在犹疑不定中三心二意地阅读本系列,一定会半途而废;因而要想阅读本系列书籍,就必须下定决心,准备好把这一年的业余时间献给这无与伦比的不朽著作吧。顺带说一句,在阅读这一套艰深的书籍期间,可以配套阅读一些相对轻松的书籍,例如《黑客与画家》,《浪潮之巅》或者《程序员的思维修炼》之类的书籍,就当是给自己的大脑放放假吧。


这篇关于《阅读者》第20期:架构模式的圣经的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952167

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试