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



《阅读者》第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)方式,即通过确定主题相关性,定位到相关章节,广泛查阅资料,汲取与主题相关的知识营养,进而深入地分析这个主题的方方面面。本系列的第四卷就起到了很好地提纲挈领的作用。如果大家希望阅读这一系列,并能在阅读之后真正有所收获,我建议的阅读顺序为:首先阅读本系列第一卷,其目的在于对模式(架构模式、设计模式与惯用法)与模式系统有一个初步的认识,可以算作是登堂入室的第一步。没有踏出这第一步,就很难谈得上你能够很好地理解架构模式。这一步骤可以是一个快速浏览的过程。正如陶渊明所言"好读书,不求甚解",此次阅读完全可以遵循这七字法则,不必深入理解书中讲解的每个模式。阅读时不能理解的,可以暂时搁置在一边。


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


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts