一
.
软件体系结构(架构)
软件体系结构的定义
通常,软件体系结构通常被称为架构,指能够预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度
的视点也会造成软件体系结构的不同理解。比方,
ANSI/IEEE
610.12-1990软件project标准词汇对于体系结构定义是“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以
及知道上述内容设计与演化的原理
(principle)”;而
Garlan
&
Shaw模型的基本思想是:软件体系结构
={构件
(component),连接件
(connector),约束
(constrain)}。
对于软
件项目的开发来说,一个清晰的软件体系结构是首要的。传统的软件开发过程能够划分为从概念到实现的若干个阶段,包含问题定义、需求分析、软件设计、软件实
现及软件測试等。软件体系结构的建立就位于需求分析之后,软件设计之前。在建立软件体系结构时系统设计师主要从结构的角度对整个系统进行分析,选择恰当的
构件(
Component)、构件间的相互作用以及它们的约束,最后形成一个系统框架(
Framework)以满足用户的需求,为软件设计奠定基础。
软件体系结构风格
软件体系结构设计的一个核心问题是是否能使用反复的体系结构模式,即是否能达到结构级的软件重用。也就是说,是否能在不同的软件体系中,使用同一体系结构。基于这个目的,学者们開始研究和实践软件体系结构的风格问题。
软件体系结构风格是描写叙述某一特定应用领域系统组织方式的惯用模式。它反映了领域中众多系统全部的结构和语义特性,并指导怎样将各个模块和子系统有效地组织成一
个完整的系统。对软件体系结构风格的研究和实践促进了对设计的复用,一些经过实践证明的解决方式也能够可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统能够共享一个实现代码。仅仅要系统是使用经常使用的、规范的方法来组织,就可使别的设计者非常easy地理解系统结构。
Garlan和
Shaw对通用体系结构风格进行例如以下分类:
(
1)数据流风格:批处理序列、管道
/过滤器等;
(
2)调用
/返回风格:主程序
/子程序、面向对象风格、层次结构等。
(
3)独立构件风格:进程通讯、事件系统等;
(
4)虚拟机风格:解释器、基于规则的系统等;
(
5)仓库风格:数据库系统、超文本系统、黑板系统等。
近年来,出现了很多新的体系结构风格,比如客户
/server(
Client
/Server)结构、浏览器
/server(
Browser/Server)结构、正交(
Orthogonal)结构、三层
C/S结构等。
软件体系结构的建模研究
研究软件体系结构的首要问题是怎样表示软件体系结构,即怎样对软件体系结构建模。依据建模的側重点的不同,能够将软件体系结构的模型分为
5种:结构模型、框架模型、动态模型、过程模型和功能模型。当中,最经常使用的是结构模型和动态模型。
研究热点
当前,体系结构仍是一个很新的研究领域,其概念还相当模糊。但软件体系结构作为软件project领域中的一个组成部分,已经取得了长足的发展,受到大多数软件系统设计和研究人员的重视。
软件体系结构眼下较活跃的研究方向包含:(
1)软件体系结构形式基础的研究;(
2)针对软件体系结构描写叙述中特有的问题研究新的专门的高级语言;(
3)建立用于度量和评价软件体系结构的模型和方法;(
4)建立面向专门领域的软件体系结构范型库。(
5)把软件体系结构从眼下的直觉和经验状态过渡到理论。
二.模式
模
式(
Pattern)的概念最早由建筑大师
Christopher
Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由
Ward
Cunningham和
Kent
Beck将其思想引入到软件领域,
Christopher
Alexander将模式分为三个部分:
(1)周境(
Context,也能够称着上下文)
,指模式在何种状况下发生作用;
(2)动机(
System
of
Forces)
,意指问题或预期的目标;
(3)解决方式(
Solution)
,指平衡各动机或解决所阐述问题的一个构造或配置(
Configuration)。
他提出,模式是表示周境、动机、解决方式三个方面关系的一个规则,每一个模式描写叙述了一个在某种周境下不断反复发生的问题,以及该问题解决方式的核心所在,模式
即是一个事物(
thing)又是一个过程
(process),不仅描写叙述该事物本身,并且提出了通过如何的过程来产生该事物。这一定义已被软件界广为接受。
软件模式的应用对软件开发产生了重大的作用,主要表如今:
(
1)软件模式是人们在长期的设计软件、管理组织软件开发等实践中大量经验的提炼和抽象,是复用软件设计方法、过程管理经验的有力工具。模式相似于拳击中的组合拳,它提供了一系列软件开发中的思维套路。如,通过模式的使用,有利于在复杂的系统中产生简洁、静止的设计。
(2)
软件模式为我们提供了一套简洁通用的设计、管理、组织方面的词汇,同一时候模式也为我们提供了一个描写叙述抽象事物的规范标准,可大大促进软件开发过程中人与人之
间的交流,而软件开发中的交流是至关重要的,“软件项目失败的原因终于都可追溯到信息没有及时准确地传递到应该接收它的人”。
三.架构和模式的关系
架构
(Architecture)和模式
(Pattern)在当前的软件开发中常常地被提及,这两个术语很easy混淆,并且学术界也没有一个很统一的定义。
架构和模式应该是一个属于相互涵盖的过程,可是整体来说
Architecture更加关注的是所谓的
High-Level
Design,而模式关注的重点在于通过经验提取的“准则或指导方案”在设计中的应用,因此在不同层面考虑问题的时候就形成了不同问题域上的
Pattern。模式的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了模式,因此,模式是一个经验提取的“准则”,而且在一次次的实践中得到验证,在不同的层次有不同的模式,小到语言实现
(如
Singleton)大到架构。在不同的层面上,模式提供不同层面的指导。依据处理问
题的粒度不同,从高到低,模式分为
3个层次:
(
1)架构模式
(Architectural
Pattern)、设计模式
(Design
Pattern)、实现模式
(Implementation
Pattern).架构模式是模式中的最高层次,描写叙述软件系统里的主要的结构组织或纲要,通常提供一组事先定义好的子系统,指定它们的责任,并给出把它们
组织在一起的法则和指南。比方,用户和文件系统安全策略模型,
N-层结构,组件对象服务等,我们熟知的
MVC结构也属于架构模式的层次。一个架构模式经常
能够分解成非常多个设计模式的联合使用。
(
2)设计模式是模式中的第二层次,用来处理程序设计中重复出现的问题。比如,《设计模式
--可复用面向对象软件的基础》一书中总结的
23个基本设计模式——
Factory
Pattern, Observer
Pattern等。
(
3)实现模式是最低也是最详细的层次,处理详细到编程语言的问题。比方,类名,变量名,函数名的命名规则;异常处理的规则等等。
相对于系统分析或者设计模式来说,体系结构从更高的层面去考虑问题,所以关注的问题就体如今“不变”因素上,比方系统部署中,更加关心应用程序的分层分级设计,而在这个基础之上提出的部署方案,才是架构考虑的重点。体系结构关心应用程序模式,更加体如今通过技术去解决这些业务差异带来的影响,关心是否是分布式应用程序,关心系统分层是怎样设计,也关心性能和安全,因此在这种情况之下,会考虑集群,负载平衡,故障迁移等等一系列技术。
总之,希望通过定义的方式来区分架构和模式是不太可能的,由于本来就是交互交叉和提供服务的,它实际上是架构模式,而不是设计模式。在大部份情况下,表现为以下几个设计
模式之中的一个:
Strategy模式、
Mediator模式、
Composite模式、
Observer模式。对于熟悉架构设计的系统架构师而言,似乎能够用
例如以下来解释架构和模式之间的关系:架构是
Hight-Level
Design,着眼于不同业务中共性的解决方式,而模式是
General
Principle(通用原理
)。