写点什么

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

  • 2012-08-13
  • 本文字数:4148 字

    阅读完需:约 14 分钟

提及模式,开发人员的第一反应一定是 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 章的内容。如果你仍然没有很好地理解,你还可以通过本书提供的参考文献获取相关知识,又或者通过互联网搜索相关的文档。而这正是所谓“主题阅读”的阅读形式,严格地讲,它更像是一种学术研究,通过延伸与比较的阅读,彻底明白每一个知识主题。

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

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

2012-08-13 00:008169
用户头像

发布了 109 篇内容, 共 40.8 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

2022中国信通院安全运营发展论坛成功召开

中国IDC圈

安全

前端工程化:保姆级教学 Jenkins 部署前端项目

伤心的辣条

Python 程序员 jenkins 自动化测试 接口测试

国际SaaS企业有哪些机遇和挑战

ToB行业头条

打造软件供应链安全平台,「安势信息」完成数千万元天使轮融资

安势信息

Git 不要只会 pull 和 push,学学这 5 条提高效率的命令

CRMEB

国家先进计算产业创新(宜昌)中心正式落地 由中科曙光、升哲科技联合运营

SENSORO

人工智能 物联网 新基建 智慧城市

元气部落仿站开发,元气部落盲盒系统APP开发

WDL22119

盲盒小程序开发 盲盒源码 盲盒H5开发 盲盒APP系统开发 元气部落仿站开发

转行软件测试跳槽到新公司,工作如何快速上手?

伤心的辣条

Python 程序员 软件测试 自动化测试 接口测试

CVPR2022 |小红书首创多图交互建模挑战热门研究课题,大幅提升行人重识别性能

小红书技术REDtech

Transformer CVPR2022 行人重识别

安势信息加入OpenSSF (开源安全基金会), 共建软件供应链安全

安势信息

Linux DevOps SCA工具 opensource

直播回顾 | 传统应用进行容器化改造,如何既快又稳?

BoCloud博云

云原生 容器云 应用

CloudTTY:下一代云原生开源 Cloud Shell

Daocloud 道客

Kubernetes 云原生 开源项目 网页命令行

应用实践 | Apache Doris 在网易互娱的应用实践

SelectDB

MySQL 数据库 最佳实践 apache doris 数据优化

从功能测试进阶自动化测试,熬夜7天整理出这一份3000字超全学习指南【附网盘资源】

伤心的辣条

Python 程序员 软件测试 IT 自动化测试

云上360行丨深耕快消品行业数字化转型,纷享销客与华为云合力同行

华为云开发者联盟

人工智能 modelarts 快消品 纷享销客

三星堆重大发现!信息量巨大

Dylan

三星堆 四川省 文物

新一代政务云的“前移”与“致远”

云计算

LeaRun.Java表单快速开发工具

力软低代码开发平台

InnoDB体系架构

龙空白白

MySQL InnoDB

Vue-8-计算属性和侦听属性

Python研究所

6月月更

GPU渲染全解读:GPU渲染器的发展与对比

Finovy Cloud

渲染器 GPU服务器

测试员该知道的软件测试流程,你都知道吗?

伤心的辣条

Python 程序员 软件测试 IT 自动化测试

给你一个项目,你将如何开展性能测试工作?

伤心的辣条

Python 程序员 IT 自动化测试 接口测试

如何高效的进行接口测试?【工具篇】

Liam

测试 Postman 接口测试 API接口管理 接口测试工具

UI自动化测试框架搭建-优化企业微信通知

伤心的辣条

Python 程序员 软件测试 自动化测试 UI自动化

博云《应用上容器指南》首发!详解应用容器化改造

BoCloud博云

容器 云原生 容器云 应用

俄航天局局长:外星生命或正在研究人类文明

Dylan

俄罗斯 外星人 航天局

35人首次上榜、行者皆勇者——创业邦3040新青年创投峰会圆满落幕

创业邦

3 个技巧来破解你可以立即使用的 Flutter 生产力!

坚果

6月月更

OSPO如何帮助保护你的软件供应链

安势信息

开源 DevOps 开源社区 SCA opensource

养老金融政策频出,市场有多大?

易观分析

养老消费

《阅读者》第20期:架构模式的圣经_语言 & 开发_张逸_InfoQ精选文章