50
那,具体来说,什么是风格?
风格在这里指的是,一个代表了业务组件,它们之间的连接,它们之间的产品上的约束,这样的一个集合,这就是风格。
架构的风格,就是一种架构的模式,而架构模式和架构风格成了最重要的区别,架构风格解决的是一类问题,而模式解决的是一个具体的问题。
比如,一个企业发展,有两个风格,一个是贸工技,一个技工贸,你们来想想,这跟真正的企业经营有没有联系紧,技工贸,贸工技,它的抽象度非常高的,而它并没有说具体的经营什么产品,以及怎么经营的,它只是说了一个贸工技还是贸工技,包括一个企业怎么应用规模化,我们只是说了多元化和国际化。所以这个是比较笼统的,这样来说,你有没有理解架构风格是如何确定的?
这也只是相对来说,是一个问题的解决方案,但是,是一类问题的一个更加宏观的解决方案。架构风格的定义,包括面向模式的软件架构里面,也是对架构风格做了一个定义。
Architectural Style By Frank Bushchmann
An architectural style expresses a fundamental structural organization schema for software system.
It provides a set of predefined element types, specifies their responsibilities, and includes rulesand guidelines for organizing the relationships between them.
The key point about an architectural style is that it provides a set of organizational principles for the system as s whole, rather than for the details of one piece of the system. The solution described by an architectural style is usually defined in terms of types of architectural elements and their interfaces, types of connectors, and constraints on how the elements and connectors should be combined.
架构风格表示软件系统的基本结构组织架构。
它提供一组预定义的元素类型, 指定它们的职责, 并包括用于组织它们之间关系的规则和准则。
体系结构风格的关键点在于它为系统提供了一整套的组织原则, 而不是系统的一部分细节。体系结构样式所描述的解决方案通常是根据体系结构元素的类型及其接口、连接器类型以及如何组合元素和连接器的约束来定义的。
这样的定义,是从架构模式的角度来定义了架构风格,就是说架构风格,首先是一种架构模式,现在我们把它建立这个关系,认为风格是一种架构模式。
51
那,这该如何表达的,表达的又是什么呢?
这里表达的是,软件系统的一个基本的结构性的组织计划。实际上它是一种计划,所以风格是什么?
风格表达的是一个软件系统的,一个根本的结构,组织的一个计划。组织计划,每个风格里面提供了元素的类型,元素的职责,以及它们的规则和指导原则,这就是架构的风格。
那,一个架构风格的要点是什么?
它提供的是作为一个整体系统的组织原则,一套组织原则。所以说,架构风格,一定是系统原则,组织原则,它是跟整个系统连在一起的,而设计是跟一个具体的子系统连在一起的,它不是跟作为一个整体的系统连在一起的,所以这个规则(law)是不一样的,设计它关注的不是一个系统的方面。
用一个架构风格描述,通常是根据的架构元素,它们的接口联系的类型,定义这些鬼东西的本质上,还是因为架构本身并没有真正的国际标准,所以,架构这个词就是一个仁者见仁,智者见智的定义。
52
在UML2.0里面的架构,架构的定义就比较简单可操作了。
UML 用户指南2.0中的架构定义
Architecture is the set of significant decisions about:
The organization of a software system.
The selection of the structural elements and their interfaces by which thesystem is composed.
Their behavior, as specified in the collaborations among those elements.
The composition of these structural and behavioral elements into progressively larger subsystems.
The architectural style that guides this organization: the static and dynamic elements and their interfaces, their collaborations, and their compostion.
体系结构是有关以下各项的重要决策的集合:
软件系统的组织。
系统组成的结构元素及其接口的选择。
他们的行为, 在这些元素之间的协作中指定。
这些结构和行为元素组成的渐进较大的子系统。
指导本组织的体系结构样式: 静态和动态元素及其接口、它们的协作以及它们的组成。
Software architecture isnot only concerned with structure and behavior, but also with usage,functionality, performance, resilience, reuse, comprehensibility, economic and technology constraints and trade-offs, and aesthetic concerns.
软件体系结构不仅与结构和行为有关, 而且与使用、功能、性能、复原力、重用、可理解性、经济和技术约束和权衡以及审美关注有关。
这样,说的就比较具体了,刚才那些说的比较笼统的。这个是怎么定义的?
它是说,架构是,重要决策的集合,决策重要阶段,包括结构里面选择哪些元素,每个元素有什么结构,说白了就是元素的外部可见特性,这个结构是广义的接口,广义的概念。
53
这些结构元素是怎么协作的,就是通过图有结构元素,所有的东西都放到包里面去了。元素要定义好它的外部特性,这些不同包里面的元素,怎么协作产生一个行为,通过它的概念模型,就可以来描述。或者说,有个包,这个包里面有很多的元素,搞清楚它的外部可能性。类是一个抽象,搞清它能干什么和如何来交互协作。
首先一个用例,所表现的行为除了这些之外,还有一个怎么样把这些元素,合起来组成一个更大的系统。比如一个企业的组织结构,原来是在一起的,现在准备把这五家子公司在朝着更大的方向去整合,某种意义上整合到一家公司,那你总是从一些小系统,慢慢整成一个更大的系统,这样的话,它的结构越来越清晰。最后就涉及到架构的风格,这是一个非常重要的一个词,架构的风格。
下面它要关注的事情,就是软件的架构,也关注它的质量指标,包括它的美学等,这些都是属于架构里面要关注的。
所以说要纠正一个观念,不要一提到架构,就以为它就是个结构,这样想就完了,架构它不但有结构,它还有行为,还有风格,还有一堆有关它的质量指标。
54
这样就比较容易理解了,当然了,通过我的尽可能的表达,但是理解起来还是比较复杂的,这并不是用定义的方式可以解决的,那,我再企图给出最终正式的定义,最终的架构的定义是什么?
Architecture——fundamental conception of a system in its environment embodied in its elements, their relationships to each other and to its environments, and the principles guidingits design and evolution.
架构——一个系统的基本概念, 它的环境体现在其要素、相互关系及其环境中, 以及指导其设计和演变的原则。
这个定义是国际标准的定义,就是把架构给它标准化了,因此,架构是一个系统基本的设想,这个系统一定会在一个环境里面,或者在一个语境里面的系统的基础的设想,或者一个根本的设想。
架构体现了一个系统里面的元素,以及这个系统里面元素之间的关系,以及这个系统里面的元素跟它环境之间的关系,还有指导这个系统的设计和演化的一些指导原则。
所以,现在我们应该看到,为什么要去讲设计原理或者讲设计原则,因为这是属于架构的内容。
知道了这个概念之后,我们现在来开始推理,我先提一个怪怪的问题,架构能不能看得见?架构可以开得见吗?
我想大家可能都学过物理,但是我们来回忆一下,我们当时学物理的时候,学磁场这个概念的时候,能不能看得见场能?就是说我们,弄个磁铁来放在上面,形成那个东西,比如,我们体会到了,什么磁角磁力线这些概念,但这些概念等于磁场吗?
这肯定是不等于的。同理,现在我们用这样的概念来推理。架构看得见,还是看不见?
也是看不见的,这就跟磁场不能看得见是一样的道理。
55
既然看不见,那架构的描述是什么?
架构和架构的描述这是两个不同的概念。一个是内容,一个是表示。所以说一个重要的概念产生了。架构实际上是一个看不见的东西,是一个设想。当你把它弄下来的时候,是一个架构的描述,而架构的描述不一定就是那个架构本身,是吧?
你描述的不是人家在里面的架构,所以,这就是我们对架构的重要理解,架构是一种设想,但是这个设想里面包括一堆元素,核心的概念就是,这里面的元素一定是架构级别的元素。
因为我们知道决策也有非架构级别的决策,比如这个元素指的是属性,做一个手机要考虑形状,这也是个决策。但是这些不是架构决策,所以,当我们谈架构的时候,这里面的元素一定都是架构级别的元素。说的通俗点,一般的都是总经理副总级别的人,他们这些人关心的元素,这些元素在企业里面是架构级的元素,这是从更高层的角度来看的。
架构内部的关系,包括自身的关系以及跟环境的关系,还有指导它们后面那些元素设计的一些指导原则,设计和演化的一些指导原则。
所以,这样我们就理解了,架构是不可见的,可见的是架构的描述。
其实啊,哲学也是类似的,听上去看上去,是很玄很空很虚,是很难表达的,但是,你又不能说不需要哲学,更不能说哲学是没用的,它还是可以表达很多高深的问题。这是因为,哲学的思维方式就是它本身就是这样的思维方式,造成的。
因此,我们平常人,一定要经过训练,才能说自己对哲学有一点点感觉了,语言这个东西,在面临复杂的情况时,是很难表达清楚的,而哲学语言的厉害之处,它能表达清楚,虽然看上去有点虚,因为它使用了大量的概念,而一个哲学家的厉害之处,就在于他使用这些概念把某些问题,真能从逻辑上表达得非常清楚。
能通过逻辑,清楚的表达自己的思想,还能让别人理解你的这种表达,这确实是一项很强的能力,也是值得一个人一辈子不断的追求下去的。