26
什么叫架构?
Fore metaphors for architecture
Architecture as blueprint. / Architecture asliterature. / Architecture as language. / Architecture as decision.
架构的前喻——架构作为蓝图。/ 架构作为文献。/ 架构作为语言。/ 架构作为决定。
软件架构,以前没有统一的定义,不同的人从不同的角度定义了这个概念。那当然是哪些人的定义比较全面客观有影响力,我们就用哪个人的定义了。
架构找到了四种比喻,现在看起来还不太准确,后续会修正的。架构,它是需求和设计之间的一座桥梁桥,它连接了我们的需求与设计,从而架构本身也成为了一门学科。软件架构学科无疑是公认的学科,架构就位于这个抽象的中心点。
架构要通过抽象人们的关注点,从而针对这些关注点进行分割,来简化软件开发的复杂性,这是我们的一个中心思想。
27
视图在某种意义上是等价的,但是透视图,更多的是横切的,最典型的例子,就是安全锁,这个是软件和硬件细节配合起来,才能实现一个安全。
这些都是需要,功能性,内部结构与硬件结构是配合在一起工作的,我们的对应点是涉众,然后,从涉众自己的视角(perspectives),看到的问题的不同方面。
就正如那个大象的故事,我们需要把他们不同的视角都融合在一起,那个大象的图像,经过一个组装,形成一个完美而真实的架构,这就是整个软件构架的过程,从而获得了一个架构设计的成果。
软件架构的目的,就是满足需求的情况下,一定要满足系统的质量,并将过程和结果记录下来。
软件工程,最终做出来的是一个具体的东西,它一定是有些质量指标的。而架构是在这个系统里面的,体现出那些质量指标,从而达到我们的目的和手段有机地统一在一起,我们的目的当然是要满足用户需求了。
软件最终是一堆具体的软件质量属性,通过一定的手段和方法,去实现与满足不同的涉众的需要。
28
因此,Role of Software Architecture/软件架构的作用是,A crucial bridge between requirements and design.
它是需求与设计之间的重要桥梁。因此,软件架构的本质动机就是:
The software architecture discipline is centered on theidea of reducing complexity through abstraction and separation of concerns.
软件体系结构学科的核心是通过抽象和关注的分离来降低复杂性的思想。它为了解决在系统高层交互上的麻烦,处理关于设计和实施的决策,改善涉众之间的交流,以及增强架构的复用。Software architecture is really the amalgamation of the multiple perspectives a system always embodies.
软件架构实际上是一个系统始终体现的多重视角的融合。那,软件架构的目的是什么呢?
the purpose of the software architecture is to ensure that the system meets thegoals of the stakeholders with respect to various software qualities such asmaintainability, scalability, testability, etc.
软件架构的目的是确保系统能够满足利益干系人(涉众)对各种软件质量的目标,如可维护性、可伸缩性、可测试等。
架构师,他要为这个应用软件确定一个参考架构,他一定要追寻一种开发方法,然后能有一个参考模型,再然后记录下他的一些关键性的架构。参考模型,是对这个应用程序连在一起的。也就是说,不同的衣服,或者不同的风格,你的参考模型是不一样的。
29
不同的参考模型,就构成了不同的模式。架构模式又分成了三类。架构风格,是一种架构模式,风格是模式的一种,但模式不一定是风格,所以风格的力度会更大一些。
我们的核心概念是应用框架,因为我们是在框架思维的指导下进行工作的,应用框架但不是一个参考模型,应用框架里面有架构的基本,最终的架构是在模型之后。首先要确定的是风格,然后是架构的机制,当一个系统做完了随着需求的变化而改变,首先改变的就是一种架构的风格,架构的风格会有很多,不同的风格组合在一起,就形成一个异构的风格。
比如,每个企业都会去解决一个社会问题,那它都有一个架构,而架构首先体现了它的价值。企业会根据具体的业务形式,在一个行业里面解决问题的时候,还形成了一套自己的固定的风格。如果,他们的风格是一样的,那就形成了依赖性,比如电子商务这类企业,电子商务构成的一类系统,形成了这样的风格,于是,所有的使用电子商务应用系统,他们都有基本一致的架构风格,比如选了一些固定的BS(浏览器服务器)结构的架构风格。
选择了这样的架构,就构成了这个行业的软件系统,于是就体现出了广义的模式,这是我们整个的思路了。就是一个怎么样的风格,使得它可以能满足各种需求,通过架构使得我们能够从需求到设计上的来解决问题。
首先要理解的,就是架构处于的上下文环境。
比如,我们学习行业软件,然后说一定的风格是什么,风格是经验的一个总结,因为风格是某些系统共有的。形成了一个架构的风格,一个架构的模式。那,经验从哪里来,经验其实就是一种体验,是从实践中来的。
行业里应用的这些规则,这叫工程,engineering,但是我们在这个基础上,又要有一些创造性,creative,那就是艺术。任何行业里面的应用软件系统,都是在一定的约束规则下,再去发挥你有限的创新性,这需要找到一个平衡,这就是架构的风格。
30
核心图,实际上就演绎了这个approach。当我们讲架构的,我们用的是UML,这是我们的架构描述语言,最核心的就是要识别涉众,找到每个涉众的关注点,然后管理分割这些关注点,形成一个具体的架构的模型。
别忘了,本书的目的是什么?
高度决定视野。
角度改变观念。
尺度把握人生。
因此,《框架思维》,通过一个完全真实的案例,使用模型驱动开发(MDD)的软件工程过程的方法,有效运用由用例捕获的系统需求(用例模型),去驱动一个强壮的模型驱动的架构(MDA)的开发必须的理念和技巧。
在本书中,读者将在框架思维的指导下,学会如何进行架构的构思、定义、描述、记录、分析、设计、实施和评估等关键活动,通过在整个软件项目生命周期中,运用UML去捕获和交流软件架构决策。
我们在一个用例驱动的、以架构为中心的、迭代和增量的软件工程过程中,学会如何架构符合软件架构目标和系统质量特性的软件架构。
31
达到目标时,一个读者将具备以下能力:
熟练掌握框架思维这一普遍性科学性的方法论,熟练掌握软件架构的定义、范围、目标、风格、框架、描述,验证和评估等。
熟练掌握软件架构师的定义、定位、职责、评估、培养以及与系统分析师、软件设计师和项目管理等角色的重要区别和内在联系等。熟练掌握软件构架的过程。通过呈现一组架构视点和架构透视图,为软件架构师改善个人和组织的软件系统架构的途径提供具体的方向。
掌握设计反映和平衡不同的涉众需要的架构的方法。掌握和涉众一起交流架构并且论证架构满足他们的需求的方法。聚集架构设计的重要方面,包括常被忽略的诸如性能、弹性和位置等架构重要的方面。
以及,使用场景和模式去驱动架构的创建和验证。使用一组相关的视图文档化架构。使用透视图确保满足系统的性能、伸缩性和安全等重要质量属性。熟练掌握不同层级的架构机制,例如:分析机制、设计机制和实施机制。熟练掌握分析模型、设计模型、实施模型、部署模型的开发。
因此,内容包括并不限于:
01框架思维与软件架构导论
02 UML用例分析与机制
03案例与软件开发方法论
04思维模式与需求分析
05架构风格模式
06可重用的架构资产
07架构分析设计与架构实施
08 MVC架构风格与RSA工具的使用
09关键需求决定架构
10文档化架构与架构评价依据
11面向对象的架构设计原理
32
此系列适合于已经积累了面向对象的软件系统开发经验的项目经理、架构师和设计师。以及其它想了解此类内容的人士。读者需要了解,软件工程过程和软件项目的生命周期,UML和建模工具,软件开发过程,软件需求工程,面向对象的设计模式。架构集成开发环境(IDE),使用Rational Software Architect(RSA)。
图012 软件工程过程和软件项目生命周期