45
在UML里面,UML参考手册指南里面,也对架构做了一个定义,我们来看UML。在参考参考手册,它是怎么定义的呢?
Semantics of architecture
Architecture is the set ofsignificant decisions about the organization of a software. It includes theselection of structural elements and the interfaces through which they areconnected, the large-scale organization of structural elements and the topologyof their connection, their behavior as specified in the collaborations amongthose elements, the important mechanisms that a available across the system,and the architectural style that guides their organization
体系结构的语义
体系结构是关于软件组织的重要决策的集合。它包括结构元素的选择和他们连接的接口, 结构元素的大规模组织和他们的连接的拓扑学, 他们的行为指定在那些之间的合作元素, 系统中可用的重要机制, 以及指导其组织的体系结构样式。
它说架构是一个系统的组织性的结构,它包括了把它分解成部件,它们之间的连接,还有行为与交互机制,以及系统设计的一些指导原则,或者指导原理。
所以这个概念就比刚才的稍微丰富了点,刚才说就是元素,外部可见元素的特性以及元素之间的关系就构成了一个架构。而现在它看到的是,有元素,有关系,还有行为与交互机制,还有整体分解的指导原则。
架构,怎么来理解这些语意?
For example, the decisionto construct a system from two layers in which each layer contains a smallnumber of subsystems that communicate in a particular way is an architecturaldecision.
Software architecture is not only concerned with structure and behavior, butalso with usage, functionality, performance, resilience, reuse,comprehensibility, economic and technology constraints and trade-offs, andaesthetic concerns.
例如, 从两层构建一个系统的决策, 其中每个层包含少量的子系统, 以特定的方式进行通信, 这是一个架构决策。
软件体系结构不仅与结构和行为有关, 而且与使用、功能、性能、复原力、重用、可理解性、经济和技术约束和权衡以及审美关注有关。
46
首先我们从组成上来看看,架构是意义重大的决策的集合。在前面,在谈设计思路给大家说,架构有四种隐喻,一个是就是架构被当成一种决策,而决策派就是UML的这帮人他们所倡导的。
而认为架构实际上就是包含了重要的角色的集合,这样一种思路人被称为组成派。
架构,作为一种蓝图,作为一种语言,架构也作为决策。决策派认为是有关一个软件系统的组织的这样的一些重要的决策。它包括了这样的一些结构性的元素,以及结构性元素的选择,通过接口把这些元素连接在一起,还有这些元素之间的协作,有类图,有元素,元素之间怎么样的关系,它们是怎么样交互从而产生用例所期待的这个行为的,这都属于架构的内容。
Discussion of architecture
Architectural decisionsabout the decomposition of a system into parts can be captured using models,subsystems, packages, and components.
The dependencies amongthese elements are key indicators of the flexibility of the architecture andthe difficulty of modifying the system in the future.
Another major part of anarchitecture is the mechanisms that it provides to build upon. These may becaptured with collaborations and patterns. Nonstructural decisions can becaptured using tagged values.
软件架构的讨论
可以使用模型、子系统、包和组件来捕获将系统分解为部件的体系结构决策。
这些元素之间的依赖性是体系结构灵活性的关键指标, 也是将来修改系统的难点。架构的另一个主要部分是它所提供的用于构建的机制。这些可能是通过协作和模式捕获的。可以使用标记值捕获非的决策。
包括了这个结构性元素的选择,以及它们连在一起的这些结果,还有大规模的结构性元素的组织,以及它们的拓扑连接的结构,实际上就是它们的互联关系,运行时的结构。
47
概念描述的是运行时结构,包括它的拓扑等运行结构,以及被详述在这些元素中元素间的协作中间所描述的行为,所以我们知道架构它的定义就包含了行为,以及重要的机制。
在架构的定义里面,它不单包括了结构模式。架构模式都是结构性的模式,不但包括架构模式,它还包括了一些行为性的那些东西,以及机制。大家知道机制,是一些框架性内容,还有指导它们组织的架构的风格。
style,直接把架构的风格机制等等都用上去了,通过前面的论述,你就理解了,什么叫机制,什么叫架构?
先给你举些例子,不要求精确。但是到重用架构资产的时候,这个概念理解得就很精确了,其实我们的思维方式很简单,本身就是一个迭代理解的过程,刚开始,我们不可能第一次把所有的概念都理解得很好,我先给你讲个图像,简单的理解这个概念是怎么回事,我们再用这个概念慢慢往前进。
到第二轮的时候,我们再来精确地定义这个概念,因为这些概念都是相关的,你没办法把它们摘离开去,单独理解,架构是在它的机制涉及到它的风格,还涉及到通过协作所产生的行为。
48
总而言之,它的图像是什么?
是在一些组织结构里面,有些元素,这个元素是有些接口的,能把它们连在一块,它们通过协作也产生了一个行为,还有它们有一种运行时的结构,还有设计时的结构,形成的结果,以及怎么样做整体的结构,分解成模式和风格,架构定义里面包括了这些东西。
实际上是给你讲一个风格,比如说有个角色,就是说从两层里面构造一个系统等等之类的,架构不仅是跟结构行为连在一起,它还跟一个软件系统的质量比如性能连在一起。因为我们要用架构去体现系统的质量,所以这也是这一部分内容。
在这个里面,架构风格这个词就出现了,我们需要简单的描述一下架构风格,在1996年的书里面《软件架构作为一门新兴学科远景》中间,提出了架构风格,卡耐基梅隆大学研究架构风格最好的。加州大学的伯克利分校的里面的欧文研究机构,架构描述语言是研究得最好的。
在软件架构工程组里面,这两个是世界最顶级的架构研究组。当然,世界上还有很多的其它架构研究组,包括英国也有几个,在96年的书里面定义了一个主要风格,2000年的时候,软件架构才成为国际标准,这都是在国际标准之前定义的。
49
那,我们来看看软件风格是什么?
An Architectural Style
An Architectural Styledefines a family of systems in terms of a pattern of structural organization.
An architectural styledefines:
—a vocabulary of components and connector types
—a set of constraints on how they can be combined
—one or more semantic models that specify how a system’s overallproperties can be determined from the properties of its parts
架构风格
架构风格根据结构组织的模式来定义系统的系列。
体系结构样式定义:
-组件和连接器类型的词汇表
-一组约束如何组合
-一个或多个语义模型, 用于指定如何从其部件的属性中确定系统的总体属性
架构风格定义了异族的系统,而这个系统是借助一个结构组织模式来定义的一组系统,就是说,一个系统,它们拥有共同的核心的组织结构模式,单靠这个,这还是无法把它和架构风格与架构模式区分开来。
实际上历史也是这样的,是先有了架构模式,才产生的架构风格的定义,或者说人们把架构模式逐渐在提炼,再往上推,引伸了出来,架构的风格的定义里面,又是用什么词来表达呢?
那,什么叫风格?架构有这三个东西,一个组件,组件之间的连接器,还有作用在这个组件和其它的约束。因此,架构有三个要素,组件,连接器,约束,但它这个组件是广义的。
整个架构的描述使用UML模型里面的最基本的概念,所以我们已经在向UML靠拢,因为UML已经成为了一个国际标准。就是说架构已经有了标准架构的描述,语言也有了标准,我们再站在这个地方,讲软件架构的时候,就必须符合这些国际标准。
这是一些核心的东西,理解完了这个之后,就知道了架构风格非常简单。它命名了哪些组件,确定了组件和组件之间的关系,这样怎么组件之间的连接也确定了,而组件上的约束也确定下来了。于是,就一套合在一块,取了一个词儿叫做风格。