无论是用线来隔开两个部分,还是用两个方框来表达这两个部分(进而由方框的边界来区隔它们),当我们表达出两个或多个部分时,每一个部分都需要一个明确的概念来指示。这涉及两个信息:其一,各个部分之间的分类依据;其二,各个部分所需的抽象指称。仍以上述“Spring架构图”为例,图4-27中的“数据对象域”与“一般对象域”是二者的分类依据①,而ORM与JEE是二者各自的指称。由于ORM/JEE这样的指称一定程度上也暗示了分类依据,因此(在交流双方或团队具有相同的知识背景的情况下),也可以省略上述的线与分类依据标识。
在架构图中,横向的线也会有类似的表示法。例如,图4-28中AOP与Core是各自的指称。“核心”(Core)这一指称在一定程度上具有“支撑”(外围)的语义,并且其注释中的container是容器框架的含义,这两个信息表达了它在对于其上的AOP等内容的支撑与包含关系。这些“暗含性的指称”使得在框架图上去除掉一些线(以①它表明的其实是“普遍/特殊”这样的分类法。
及对其分类依据的标注)之后,仍然有较明确的含义°。
如上,我们得到了一个整体的各个部分:相互间可以用线条来区隔,其自身可以用方框来表示;并且,每一个部分都"应当(且必须)"有一个明确的概念,并有文字来指称它。
一个部分所包含的子域应当位于它的方框(当前域)之内。这些子域的概念应该派生自当前域,是当前域的概念的细分、子集、关联或延伸。有时为了图示的简洁,也可以将子域的指称直接置于当前域(的方框)之中。例如,图4-29中给出的两种图示具有相同的含义。左图中直接包含了一些子域的指称(列表),注意它只强调当前域对子域的包含关系,并不强调这些子域之间有何种分类依据或存在限制关系;而右图一定程度上会导致对子域之间是否存有层次性的误解。
①领域与层次的分类依据是架构中非常重要的信息。一般有三种方法来表达它们,其一,通过线条和标注;其二,通过更为明确的分类指称;其三,在其他架构文档中加以详述。yipindushu.com
□用一个方框来表示领域,并且□把一个方框分成两个(或多个)以表明领域之间没有关系或仅有殊少关系,那么当我们试图在一个平面上来表达这些方框时,(依我仅有的知识来看,)大概只有三种方法,并进而得的三种结构。
如前所述,当我们试图在两个部分之间制造一个界面(如画一条线)时,我们是需要讨论这两个部分之间的分类依据的。就分类这一行为本身而言,我们可以有无数种依据以及无数种方法,但就我们这里需要讨论的问题——如何降低或至少不增加系统整体的复杂性来说,一种可选的分类依据是:如何隔离变化。
系统的复杂性有很大一部分是由其可变性导致的①。但既有其可变处,也必有其①在“第二节系统的架构与决策”中,是把规模作为复杂性的一部分,讨论系统在“领域集总量”上的规模。
不变处。以上述三种结构的表达方式来看:□如果一个系统的公共部分是不变的,那么它适合用层次来表示;□如果一个系统的总量是不变的,那么它适合用并列结构来表示;□如果一个系统的核心是不变的,那么它适合用嵌套结构来表示。
以层次结构来论,如果我们能从系统中捕捉到那些不变的公共部分,我们就可以将它表达在底层,反之将“目前看起来可变”的部分表达在上层。如此,在一系列的架构活动结束之后,我们总是能保证系统的基底部分是无需变化的,亦即它是稳定的;相对于系统整体来说,它带来的复杂度应是衡为“1”的①;它决定了系统整体的性状是不变的2。
就“系统架构”的整体表达来看,层次结构适宜构建平台(platform)的过程,其基础领域倾向于不变;并列结构适宜构建库(library)的过程◎,其领域总量倾向于不变;嵌套结构适宜构建框架(framework)的过程④,其核心领域(或核心过程)是倾向于不变的。
版权声明
本站素材均来源与互联网和网友投稿,欢迎学习分享
【主要编程范式及其语言特性关系26:http://www.yipindushu.com/xuexifangfa/16498.html
推荐文章
09-13
1 【节刺秦与灭秦409-03
2 哲理内涵句子说说心情09-03
3 人生哲理句子朋友圈09-13
4 正能量语录大全,让生活充满阳光09-13
5 正能量语录,提升自我的人生指南