我的架构思想(三十二):架构是过程,而非结果——架构的表达与逻辑(对系统或其构件的不变性的表达:平台、框架与库)

阅读数:15 2019 年 10 月 12 日 17:05

我的架构思想(三十二):架构是过程,而非结果——架构的表达与逻辑(对系统或其构件的不变性的表达:平台、框架与库)

如果我们

  • 用一个方框来表示领域,并且
  • 把一个方框分成两个(或多个)以表明领域之间没有关系或仅有殊少关系

那么当我们试图在一个平面上来表达这些方框时,(依我仅有的知识来看,)大概只有三种方法,并进而得到图 30 所示的三种结构。

图 30 在平面上表达领域的三种方法

我的架构思想(三十二):架构是过程,而非结果——架构的表达与逻辑(对系统或其构件的不变性的表达:平台、框架与库)我的架构思想(三十二):架构是过程,而非结果——架构的表达与逻辑(对系统或其构件的不变性的表达:平台、框架与库)

如前所述,当我们试图在两个部分之间制造一个界面(如画一条线)时,我们是需要讨论这两个部分之间的分类依据的。就分类这一行为本身而言,我们可以有无数种依据以及无数种方法,但就我们这里需要讨论的问题——如何降低或至少不增加系统整体的复杂性来说,一种可选的分类依据是:如何隔离变化。

系统的复杂性有很大一部分是由其可变性导致的4。但既有其可变处,也必有其不变处。以上述三种结构的表达方式来看:

4 在“第 5 章 系统的架构与决策”中,是把规模作为复杂性的一部分,讨论系统在“领域集总量”上的规模。

  • 如果一个系统的公共部分是不变的,那么它适合用层次结构来表示;
  • 如果一个系统的总量是不变的,那么它适合用并列结构来表示;
  • 如果一个系统的核心是不变的,那么它适合用嵌套结构来表示。

以层次结构来论,如果我们能从系统中捕捉到那些不变的公共部分,我们就可以将它表达在底层,反之将“目前看起来可变”的部分表达在上层。如此,在一系列的架构活动结束之后,我们总是能保证系统的基底部分是无需变化的,亦即它是稳定的;相对于系统整体来说,它带来的复杂度应是衡为“1”的5;它决定了系统整体的性状是不变的6

5 在本小节有关复杂性的叙述中,“1”是没有单位的,表明它的确定性;当它与“(计量)单位”同时出现时,才能表明复杂性的大小。本书不讨论“如何计量系统复杂度”的问题(亦即是说不讨论单位的设定),仅以这种抽象描述的细微差异来说明“复杂性的大小与可变”之间是存有区别的。

6 类似这种“(状)”的不变,并列与嵌套结构表达的分别是系统的“(总)”与“(本)”上的不变。

就“系统架构”的整体表达来看,层次结构适宜构建 ** 平台(platform)的过程,其基础领域倾向于不变;并列结构适宜构建库(library)的过程7,其领域总量倾向于不变;嵌套结构适宜构建框架(framework)** 的过程8,其核心领域(或核心过程)是倾向于不变的。

7 就规模性而言,本书是将“库”划为应用(application)这个级别的。这里只是对它的构建与表示方法加以讨论,并不是否定此前的规模划分。从另一个角度上看,泛义的“系统”也是可以包括库、程序或功能的,因此其构建与表示方法也有可借鉴之处。

8 你可以将某些引擎(Engine)也视为框架,它是符合这里的讨论的。另外需要补充的是,这里的“框架与平台”与上一节小中的概念是相同的,这两个小节分别讨论到他们的范围(意图、方向与目的)与结构。

评论

发布