1、软件体系结构风格3.1 软件体系结构风格概述o 软件体系结构是随着软件工程的发展而逐步发展起来的。20世纪90年代,人们开始对软件体系结构进行研究,当时,软件系统程度的提高和规模的扩大使得软件开发人员开始感到很困难,而且,开发出软件的质量也难以保证。软件体系结构概念给人们进行软件开发带来了曙光,至今它已成为现代软件开发过程中一个至关重要的部分。o MarShaw和DavidGarlan 中提出的软件体系结构定义为:能够用来具体描述软件系统控制结构和整体组织的一种体系结构,能够表示系统的框架结构,用于从较高的层次上来描述各部分之间的关系和接口。由于软件体系结构作为软件工程的一个独立研究领域出现时
2、间不长,对于软件体系结构概念并没有统一的定义。但研究者们对软件体系结构也达成了一些共识:(1)软件体系结构是对系统的一种高层次的抽象描述。主要是反映拓扑属性,有意忽略细节;(2)软件体系结构是由构件和构件之间的联系组成,构件又有它自身的体系结构;(3)构件的描述有3个方面:计算功能、结构特性及其他特性。由此,产生了软件体系结构风格的概念。硬件、操作系统、数据库和网络差异的屏蔽;解释器只接收符合语法规则的程序作为它的输入,经过每个状态的执行,最终得出它的结果是否为真。如果为真,则找到它的一个模型,如果为假,则会提示错误。通用核心层完成的是软件的一些通用的公共操作,这此操作能够尽量做到不与具体的数
3、据库和表结构相关。客户端摆脱了业务逻辑的束缚,对业务逻辑的变更不再敏感,给应用程序的维护带来了便利;管道/过滤器风格的优点:从过程控制的角度来分析和解释构件之间的交互,同时,应用这种交互来改善系统性能。需要新的功能构件时也只需要按规定独立开发,完成后组装到原软件平台中即可使用,实现了一种二进制的软件集成方法。硬件、操作系统、数据库和网络差异的屏蔽;应用的负载均衡和管理功能;三层C/S结构同样包括客户机、应用服务器和数据库服务器三个部分。事件驱动架构是由Gartner公司于2003年提出的。这种模式的构件是对象,或者也可以称为抽象数据类型的实例。维修收银功能需要涉及维修时的派工、外出服务和维修用
4、料,因此,适当放宽了要求,采用了非完全正交体系结构,允许线索之间有适当的调用,不同线索之间可以共享构件。o 从软件体系结构的定义可以看出,软件体系结构主要涉及构件、构件之间的联系与约束、由构件通过相互交互形成的系统架构三个方面的内容。可用下图来简单表示软件体系结构。o 通过使用软件体系结构,可以有效地分析用户需求、方便系统的修改以及减小程序构造风险。随着软件规模的不断增大和复杂程度日益提高,系统框架结构的设计变得越来越关键。o 软件框架设计的核心问题是:能否重用已经成型的体系结构方案。由此,产生了软件体系结构风格的概念。软件体系结构风格包括构件、连接件和一组将它们结合在一起的约束限制,诸如:拓
5、扑限制和语义限制等。3.2 常用的软件体系结构风格常用的软件体系结构风格 o 软件体系结构的风格是在开发软件的过程中不断积累起来的,是多年探索研究和工程实践的结果。它由组织规则及结构构成,是描述领域中系统组织方式的惯用模式,是对某一特定领域中系统所共有的结构和语义特性的反映。体系结构风格的分类:o 数据流风格:批处理序列、管道/过滤器;o 仓库风格:数据库系统、超文本系统、黑板系统;o 独立构件风格:进程通迅、事件系统;o 调用/返回风格:主程序/子程序、面向对象风格、层次结构;o 虚拟机构格:解释器、基于规则的系统。管道/过滤器风格o 管道/过滤器架构是典型的数据流软件架构风格。主要包括过滤
6、器和管道两种元素。o 在这种体系结构中,每个模块都有一组输入和一组输出。每个模块从它的输入端接收输入数据流,在其内部经过处理后,按照标准的顺序将结果数据流送到输出端,以达到传递一组完整的计算结果的目的。o 每个部件从输入接口中读取数据,经过处理后将结果数据置于输出接口中,这样的部件称为过滤器。这种模型的连接者将一个过滤器的输出传送到另一个过滤器的输入,这种连接者称为管道。o 过滤器的基本结构如下图所示:o 管道/过滤器结构将数据流处理分为几个顺序的步骤来进行,一个步骤的输出是下一个步骤的输入,每个处理步骤由一个过滤器来实现。o 在管道/过滤器风格中,过滤器必须是相互独立的实体,它们相互之间的状
7、态不可共享。每一个过滤器并不能识别它的数据流上游和下游的过滤器的身份,那么就需要在过滤器的输入输出端口的管道必须来保证输入数据和输出数据类型的衔接的正确性。管道/过滤器风格的系统架构图如下图所示。管道/过滤器风格的优点:o 设计人员将整个系统的输入输出行为理解为单个过滤器行为的叠加与组合。o 任何两个过滤器,只要它们之间传送的数据遵守共同的规约就可以相连接。o 整个系统易于维护和升级。o 支持并发执行。o 传统的编译器是管道/过滤器体系结构风格的另一个著名的例子。编译器由词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成等几个模块组成,一个模块的输出是另一个模块的输入。源程
8、序经过各个模块的独立处理之后,最终将产生目标程序。编译器的框架结构,如图所示。面向对象体系结构风格o 抽象数据类型概念对软件系统有着重要作用,目前软件界已普遍转向使用面向对象系统。o 面向对象体系结构风格建立在数据抽象和面向对象的基础上,数据表示和相关的基本操作封装在抽象数据类型或对象中。这种模式的构件是对象,或者也可以称为抽象数据类型的实例。对象是一类可称之为管理者的构件实例,因为它负责维护一种资源的完整性。o 数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的组件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的组件,因为它负责保持资源的完整性。对象是通过函
9、数和过程的调用来交互的,面向对象体系结构如图所示。面向对象系统的优点:o 一个对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其他的对象;o 对象将数据和操作封装在一起,提高了系统内聚性,减小了模块之间的耦合程度,使系统更容易分解为既相互作用又相互独立的对象集合;o 继承和封装方法为对象重用提供了技术支持。分层体系结构风格o 分层体系结构风格是调用/返回风格的一个代表。层次风格组织成一个层次结构,通过分解,能够将复杂系统划分为多个独立的层次,每一层都具有高度的内聚性,并要求每一层为上层服务,并作为下层的客户,较高层面向特定应用问题,较低层则更具有一般性。o 在分层结构中,层间的
10、连接器通过层间交互的协议来定义的,且上下层之间是单向调用关系,即上层通过下层提供的接口来使用下层的功能,而下层却不能使用上层的功能。o 分层体系结构结构如图所示:分层体系结构风格的优点:o 支持基于抽象程度递增的系统设计。o 支持功能增强。o 支持重用。o 在实际开发过程中,分层体系结构具有很高的应用价值,提高了系统的可变性、可维护性、可靠性和可重用性。分层体系结构应用的实例很多,例如:ZigBee协议栈标准采用的是OSI的分层结构,ZigBee协议栈由高层应用规范、应用汇聚层、网络层、数据链路层和物理层组成。用户应用程序(User App)应用层框架(APF)设备对象(ZDO)应用支持子层(
11、APF)应用层(APL)链路层(LLC)网络层(NWK)802.15.4 LLC802.2 LLCSSCS媒体接入层(MAC)物理层(PHY)(2.4GHz、868/915MHz)Zigbee 联盟IEEE802.15.4用户线索之间是相互独立的(正交的);主要是反映拓扑属性,有意忽略细节;由于非完全正交结构的范围不大,因此,对整个系统框架的影响可以忽略。Ext框架是一个典型的RIA应用于客户端方面的富客户端应用。解释器作为一种体系结构,主要用于构建虚拟机,以弥合程序语义和计算机硬件之间的间隙。现今的空域容量日益成为制约航空业快速发展的瓶颈之一,对飞机在航线飞行中偏离航线情况进行研究,建立碰撞
12、危险模型是间隔标准研究的基础理论。三层结构(也称多层结构)的基本思想是在分布式技术的基础上,将用户界面同应用的企业逻辑分离,把信息系统按功能划分为表示、应用及数据三大块,分别放置在相同或不同的硬件平台上。如图所示,客户请求用户信息的服务,返回结果页面中包含有该用户的表述。ExtJS由一系列的类库组成,一旦页面成功加载了ExtJS库后,就可以在页面中通过JavaScript调用ExtJS的类及控件来实现需要的功能。每一个过滤器并不能识别它的数据流上游和下游的过滤器的身份,那么就需要在过滤器的输入输出端口的管道必须来保证输入数据和输出数据类型的衔接的正确性。从正在应用的Web上讲,Web上的每个资
13、源通过一个URI来标识,可以通过简洁通用的接口来操作Web上的资源。上面的ADT构件负责存储二叉树的抽象数据类型(ADT)。传统的编译器是管道/过滤器体系结构风格的另一个著名的例子。数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。可将正交软件体系结构的核心模型表示为下图。客户机/服务器体系结构风格o 客户机/服务器(C/S)就是Client/Server模式,主要针对资源不对等问题而提出的一种共享策略。o Client是请求服务的部分,而Server是提供服务的部分,C/S结构通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,充分利用两端硬件环境的优势。o
14、 Client 和Server 一般是相距很远的两台计算机,Client 程序将用户的请求提交给Server 程序,再将 Server 程序处理结果返回给用户;Server 程序接收客户程序提出的服务请求,处理后将结果返回给客户程序。o 在C/S体系结构中,主要包括三个部分:数据库服务器、客户机和网络。服务器处理与应用和数据库相关的请求,客户端负责显示数据、处理部分数据的功能以及将用户输入的数据传送给服务器。o 实现两层结构应用时,一个应用的三大组成部件-描述、处理和数据,被分离于两个实体(客户应用代码和数据库服务器)或层次中。一般说来,对于数据库应用程序,DBMS可以为应用程序提供针对底层结
15、构的管理。应用的服务器部分是运行在远程主机上的数据库引擎。而该应用的客户部分则是运行在本地计算机上的数据库查询程序,它们之间的通信是借助于DBMS提供的网络协议实现的。如下图所示。两层C/S体系结构的处理流程如下图:尽管C/S体系结构具有强大的数据操作和事务处理能力,其模型构造简单,并且易于理解,但是,随着企业规模的日益扩大和软件复杂程度的不断提高,C/S体系结构也逐渐暴露出一些问题:n 开发成本较高。n 在开发C/S结构系统时,大部分工作都集中在客户机程序的设计上,增加了设计的复杂度。n 信息内容和形式单一。n 如果对C/S体系结构的系统进行升级,开发人员需要到现场来更新客户机程序,同时需要
16、对运行环境进行重新配置,增加了维护费用;从概念上讲,中间件是客户从服务器获得服务的粘合剂。实际上,解释器是利用软件来创建的一种虚拟机,因此,解释器风格又被称为虚拟机风格。如果对C/S体系结构的系统进行升级,开发人员需要到现场来更新客户机程序,同时需要对运行环境进行重新配置,增加了维护费用;应用程序服务器是整个系统的核心所在,系统所提供的功能基本上都是由应用程序服务器所完成的。仓库风格:数据库系统、超文本系统、黑板系统;两层C/S体系结构的处理流程如下图:应用的服务器部分是运行在远程主机上的数据库引擎。可以将这些不同的组件细分为五类,在某个具体实现中,可能会包涵这五个中的多个:编译器的框架结构,
17、如图所示。两层C/S体系结构的处理流程如下图:一个基于事件驱动构架的应用程序系统,各个功能设计为封装的、模块化的、可用于共享的事件服务组件,并在这些独立非耦合的组件之间将事件所触发信息进行传递。事件工具:由事件开发工具和事件管理工具两种组成。不同子系统采用了不同的体系结构。若要应用反馈控制策略提供性能确保,首先要设计出满足用户需求的反馈控制环,该过程如图所示。公共对象请求代理(CORBA)是由对象管理组织(OMG)提出来的,是一套完整的对象技术规范,其核心包括标准语言、接口和协议。n两层C/S结构采用了单一的服务器,同时以局域网为中心,因此难以扩展到Intranet和Internet;n数据安
18、全性不高。n为了克服两层C/S结构的缺点,可以将客户机和服务器中的部分业务逻辑抽取出来,形成功能层,放在应用服务器上,这就是所谓的三层C/S体系结构。o 三层结构(也称多层结构)的基本思想是在分布式技术的基础上,将用户界面同应用的企业逻辑分离,把信息系统按功能划分为表示、应用及数据三大块,分别放置在相同或不同的硬件平台上。o 三层C/S结构将应用的三部分(表示部分、应用逻辑部分、数据访问部分)明确地进行分割,使其在逻辑上各自独立,并且单独加以实现,分别称之为客户、应用服务器、数据库服务器。三层C/S结构同样包括客户机、应用服务器和数据库服务器三个部分。三层C/S体系结构如图所示。三层C/S结构
19、体系结构的处理流程如下图所示:由于业务逻辑层是三层结构的灵魂,它把商业逻辑和数据规则从客户端分离出来,自成独立的一层,从而很好地解决了二层结构中突现出来的弊病:o Client从与数据库服务器直接连接转变为与中间层的应用服务器连接,通过中间层的服务得到数据。o 客户端摆脱了业务逻辑的束缚,对业务逻辑的变更不再敏感,给应用程序的维护带来了便利;并且业务逻辑以组件方式存在与中间层服务器上,提高了代码重用的机会。o 在实际的应用中,可能会有多种应用和平台加入到这个Client/Server模型中去。这就要求在客户和服务器之间有一组正式的接口以支持这些应用。从结构上讲这一层位于客户和服务器之间,因而被
20、称为中间件(Middleware)。o 从概念上讲,中间件是客户从服务器获得服务的粘合剂。它的引入使原来较为简单的两层分布模型(客户-服务器)被更加精确的三层模型(客户-中间件-服务器)所替代。o 从理论上讲,中间件具有以下的工作机制:客户端上的应用程序需要从网络中的某个地方获取一定的数据或服务,这些数据或服务可能处于一个运行着不同操作系统和特定查询语言数据库的服务器中,客户/服务器应用程序中负责寻找数据的部分只需访问一个中间件系统,由中间件完成到网络中找到数据源或服务,进而传输客户请求、重组答复信息,最后将结果送回应用程序的任务。中间件的工作机制可用如下图表示。o 近年来,以中间件为框架基础
21、的三层结构C/S模式已被广泛证实为建立开放式关键业务应用系统的最佳环境。因为,作为构造三层结构业务应用系统的基础平台,中间件提供了以下两个主要功能:n负责客户机与服务器之间的联系和通讯,提供了表示层与功能层之间、功能层与功能层之间、功能层与数据层之间、数据层与数据层之间的联接和完善的通信机制;n提供了一个三层结构应用开发和运行的平台,包括:支持模块化应用开发的框架;硬件、操作系统、数据库和网络差异的屏蔽;保证事务完整性和数据一致性的事务管理机制;应用的负载均衡和管理功能;应用的高可用性及安全控制机制等。浏览器/服务器体系结构风格o 浏览器/服务器结构(Browser/Server,B/S)的出
22、现在很大程度弥补了C/S结构的缺陷,它是对C/S结构的一种变化或者改进的结构。o 在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。并结合了浏览器的多种Script语言和ActiveX技术,形成所谓三层结构,其用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。o B/S体系结构如图所示。o 在整个B/S结构模式中,用户使用客户浏览器通过互联网向Web服务器发送HTTP请求,Web服务器将与用户建立连接,然后根据发来的HTTP请求的不同,建立不同的
23、配置。o 如果请求对象是HTML脚本、静态图像等静态资源,Web服务器将所需的资源从本地的文件系统中读出,然后返回给用户。如果请求的是CGI、ASP、PHP等动态资源,Web服务器将请求发送给相应的CGI程序或脚本解释器。o 应用程序服务器是整个系统的核心所在,系统所提供的功能基本上都是由应用程序服务器所完成的。它的作用是寻找能够提供服务的应用对象,并为客户端和服务对象之间提供通道。在B/S结构模式中,数据库是存储数据的主要场所,客户端提交的数据都将保存在数据库中,应用对象通过与数据库建立连接之后,才能对数据库进行相关的操作。o B/S结构模式如下图所示。o 利用B/S架构开发某大学的教务在线
24、管理平台时,组织机构、工作职责等各级菜单可使用客户端的浏览器通过Internet访问网站Web服务器,提交相关的HTTP请求,Web服务器响应处理后,根据需要对数据库进行访问操作,将调取的数据再处理后生成结果页面返回给用户浏览器。同时根据安全需要,可对数据库进行系统备份。o B/S结构的一个典型的例子是某大学的教务在线和各级菜单系统,如下图所示。o 教务在线管理平台的系统架构如下图所示。B/S结构具有以下优点:o 系统开发、维护和升级方便且经济。o 具有很强的开放性。o 具有易扩展性。o 用户界面的一致性。o 具有更强的信息系统集成性。o 提供灵活的信息交流和信息发布服务。事件驱动体系结构风格
25、o 事件驱动架构是由Gartner公司于2003年提出的。其基本思想是:系统对外部的行为表现可以通过它对事件的处理来实现。o 一个基于事件驱动构架的应用程序系统,各个功能设计为封装的、模块化的、可用于共享的事件服务组件,并在这些独立非耦合的组件之间将事件所触发信息进行传递。o 事件驱动架构是由一系列的系统组件构成的,组件之间共同作用完成系统的功能。如图所示,这些组件之间的联接是管道化的和多模块化的,通过形成并发的事件流对企业业务事件进行处理。o 事件驱动架构的组成如图所示。可以将这些不同的组件细分为五类,在某个具体实现中,可能会包涵这五个中的多个:o事件元数据:用来实现事件定义和事件处理规则预
26、定义。o事件处理:包括事件处理引擎和事件处理对象实例两部分。事件处理引擎按照所处理的事件类型分为简单事件处理和复杂事件处理两种。o事件工具:由事件开发工具和事件管理工具两种组成。o企业系统集成:事件驱动架构中为了实现架构与现有系统的融合与事件的提取传递,必须有一个联接枢纽,这就是企业系统集成。o事件资源:事件驱动架构是在现存的企业资源的基础上建立的,包括企业已有的各种资源、如业务数据、数据仓库、服务、现有系统等。这是企业事件的来源和基础,为事件驱动的后续动作提供基础事件数据。o 事件驱动体系架构的一个实例则是基于Reich模型的飞行控制系统。现今的空域容量日益成为制约航空业快速发展的瓶颈之一,
27、对飞机在航线飞行中偏离航线情况进行研究,建立碰撞危险模型是间隔标准研究的基础理论。Reich模型是由英国的针对平行航路系统中相邻航线飞机之间单个碰撞危险建立的数学模型。在Reich模型中,重要的假设条件是管制员仅负责将飞机引导到正确的飞行路径上,随后飞机将自主导航飞行。当试图在Reich模型中加入危险分析要素时,其模型需要使用基于快照概念的概率密度函数等非常复杂的数学运算。o 开发基于Reich 模型的飞行控制GUI系统可选择基于事件的隐式调用体系风格,因为基于事件的隐式调用体系架构风格把系统对象作为封装体隐藏了其复杂性,对象的设计接口与实现相分离,使得实现的修改具有局部化的特性。基于事件的体
28、系结构风格能够降低对象之间的耦合度,对象之间的交互采用直接的过程调用而是采用广播等事件通讯方式。采用基于事件的隐式调用体系结构风格普遍适用于GUI开发,能够隐藏系统内部数学运算的复杂性,简化使用者的操作过程。事件驱动体系结构风格具有以下优点:o 事件声明者不需要知道哪些构件会响应事件,因此,不能确定构件处理的先后顺序,甚至不能确定事件会引发哪些过程调用。o 提高了软件重用能力。只要在系统事件中注册构件,就可以将该构件集成到系统中。o 便于系统升级。只要构件名和事件中所注册的过程名保持不变,原有构件就可以被新构件所替代。数据共享体系结构风格o 数据共享风格也称为仓库风格。这种风格的典型代表有数据
29、库系统、超文本系统、黑板系统。该风格中,主要有两类部件:n一类是中心数据结构部件,又可称作“数据仓库”(Repository),表示系统的当前状态;n另一类是一组相对独立的部件集,它们可以以不同方式与数据仓库进行交互,这也就是数据共享体系结构的技术实现基础。o 根据所使用的控制策略不同,数据共享体系结构主要有两大分支:n如果系统输入业务流的类型是激发进程执行的主要原因,则数据仓库是传统的数据库;n如果中心数据结构的当前状态是激发进程执行的主要原因,则数据仓库是黑板(Blackboard),其中黑板体系结构风格主要应用于需要进行复杂解释的信号处理领域中。o 称为黑板的原因是:它反映了信息共享,如
30、同教室里的黑板一样,其模拟一组人类专家,对于同一个问题或者是一个问题的各个方面,每一位专家都根据自己的专业经验提出自己的看法,写在黑板上,其他专家都能看到,随意使用,共同解决好这个问题。可以有多个人读上面的字,也可以有多个人在上面写字。黑板体系结构如图所示。黑板体系结构有以下优点:o 便于多客户共享大量数据,而不必关心数据是何时产生的、由谁提供的以及通过何种途径来提供。o 便于将构件作为知识源添加到系统中来。o 编译器可认为是数据共享体系结构的一个实例。编译器结构如图所示。可以看出,编译器通过不同模块访问、更新解析树和字符表完成源代码到目标代码的转换工作,同时,源代码调试器、句法编辑器也需要访
31、问解析树和字符表。解释器体系结构风格o 解释器作为一种体系结构,主要用于构建虚拟机,以弥合程序语义和计算机硬件之间的间隙。实际上,解释器是利用软件来创建的一种虚拟机,因此,解释器风格又被称为虚拟机风格。o 解释器系统由四个部分组成:被解释的程序、执行引擎、被解释程序的当前状态和执行引擎的当前状态。系统的连接件包括过程调用和直接存储器访问。解释器只接收符合语法规则的程序作为它的输入,经过每个状态的执行,最终得出它的结果是否为真。如果为真,则找到它的一个模型,如果为假,则会提示错误。o 解释器的框架如图所示。解释器体系结构具有以下优点:o 能够提高应用程序的移植能力和编程语言的跨平台移植能力。o
32、实际测试工作可能非常复杂,测试代价极其昂贵,具有一定的风险性。可以利用解释器对未实现的硬件进行仿真。o 解释器的一个例子是手机浏览器,其使用了Javascript解释器,如WebKit浏览器内核、Gecko浏览器内核以及基于J2ME的手机JavaScript解释器等等,基于手机中间件平台设计的JavaScript解释器系统的结构如下图所示。C2体系结构风格o C2体系结构风格最开始用来设计具有用户界面的应用程序,用户界面软件常常可以看作由大量应用软件片段所组成,对用户界面领域的软件重用也只是局限于一些窗口小部件代码(Widget)的重用。这种体系结构风格使得像对话框、各种抽象程度的结构图形模型
33、以及约束管理器等用户界面构件很自然地得到了重用。o C2是一种基于构件和消息的架构风格,可用于创建灵活的、可伸缩的软件系统。可以将C2架构看作是按照一定规则由连接件(如消息路由设备)连接的许多构件组成的层次网络:系统中的构件和连接件都有一个“顶部”和“底部”;一个构件的“顶部”或“底部”可以连接到一个连接件的“底部”或“顶部”;对于一个连接件,和其相连的构件或连接件的数量没有限制,但是构件和构件之间不能直接相连。C2架构风格如图3-30所示o 下图所示的是一个简单系统的C2架构。该系统由一个连接件连接两个C2构件组成。上面的ADT构件负责存储二叉树的抽象数据类型(ADT)。下面的Artist构
34、件负责把这棵树的结构表示出来。在这个系统中,ADT构件可能要产生一个通知消息以表明有一个新的元素插入到树中,这个消息是由监视其内部对象的包装器自动产生的。当此通知消息到达连接件下面的Artist构件时,Artist构件就会对它的内部对象进行操作以更新这棵树的表示。MVC体系结构风格o MVC模式属于结构型设计模式,即将应用类和对象组合获得比较复杂的结构。它是第一个将表示逻辑和业务逻辑分开的设计模式。MVC设计模式的出现使得模型层、视图层和控制层各层层次分明,各个模块之间相互独立,提高了灵活性。MVC的核心是实现三层甚至多层的松散耦合,它将应用程序抽象为三个部分,三者既分工又合作地完成用户提交的
35、每项任务。o 视图(View):代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但也有可能为XHTML、XML和Applet。o 模型(Model):就是业务流程状态的处理以及业务规则的制定。o 控制器(Controller):可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。反馈控制环体系结构风格o 反馈控制环思想源自过程控制理论,将控制理论融入软件体系结构中。从过程控制的角度来分析和解释构件之间的交互,同时,应用这种交互来改善系统性能。若要应用反馈控制策略提供性能确保,首先要设计出满足用户需求的反馈控制环,该过程如图所示。o 反馈控制环结构能够处理复杂的自
36、适应问题,机器学习就是一个典型的实例。机器学习模型如图所示。首先将训练样本输入到学习构件中,作为被查询的基本数据和知识源;然后输入真实数据,经过学习构件的分析和计算,输出学习结果。与此同时,检测构件要检查学习结果与预期结果之间的差异,并反馈给学习构件。通过引入反馈机制,使学习构件的学习能力得到增强,丰富了知识源。公共对象请求代理体系结构风格o 公共对象请求代理(CORBA)是由对象管理组织(OMG)提出来的,是一套完整的对象技术规范,其核心包括标准语言、接口和协议。在异构分布式环境下,可以利用CORBA来实现应用程序之间的交互操作,同时,CORBA也提供了独立于开发平台和编程语言的对象重用方法
37、。o 对象管理组织由5个部分组成:对象请求代理(ORB)、对象服务、通用设施、域接口和应用接口。对象请求代理实现客户和服务对象之间的通信交互,是最核心的部分,其他4个部分则是构架于对象请求代理之上适用于不同场合的部件。CORBA标准就是针对对象请求代理系统制定的规范。o 下图给出了CORBA系统的体系结构图。CORBA体系结构风格具有以下优点:o 实现了客户端程序与服务器程序的分离。o 将分布式计算模式与面向对象技术结合起来,提高了软件重用效率。o 提供了软件总线机制,软件总线是指一组定义完整的接口规范。o CORBA能够支持不同的编程语言和操作系统,在更大的范围内,开发人员能够相互利用已有的
38、开发成果。3.3 新型体系结构风格o 软件体系结构风格的五种分类也不能完全代表体系结构风格的组成,随着软件研发技术的不断进步,近些年接连总结出了几种新型的软件体系结构风格,如:正交软件体系结构风格、REST软件体系结构风格、面向服务(Service Oriented Architecture,SOA)软件体系结构风格、插件体系结构风格以及富互联网应用(Rich Internet Application,RIA)体系结构风格等。正交体系结构风格o 正交软件体系结构由组织层和线索的构件构成。层是由一组具有相同抽象级别的构件构成,线索是子系统的特例。它是由完成不同层次功能的构件组成(通过相互调用来关
39、联),每一条线索完成整个系统中相对独立的一部分功能。每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。正交软件体系结构的主要特征如下:o 由完成不同功能的n(n1)个线索(子系统)组成;o 系统具有m(m1)个不同抽象级别的层;o 线索之间是相互独立的(正交的);o 系统有一个公共驱动层(一般为最高层)和公共数据结构(一般为最低层)。o 正交软件体系结构模型:根据正交软件体系结构的概念,正交软件体系结构核心模型由5种元素组成,包括构件、连接件、端口、角色、线索。在这里,只
40、简要地介绍构件和线索的定义。n构件:构件是一个计算单元或数据存储。也就是说,构件是计算与状态存在的场所。在体系结构中,一个构件可能小到只有一个过程或大到整个应用程序,它可以有自己的数据域或执行空间,也可以与其他构件共享这些空间。n线索:线索是子系统的特例,它是由完成不同层次功能的构件组成(通过连接件来关联),每一条线索完成整个系统相对独立的一部分功能。每一个条线索的实现与其他线索的实现无关或关联很少。o 可将正交软件体系结构的核心模型表示为下图。o 以下给出汽修服务管理系统的设计方案。考虑到用户需求可能经常会发生变化,在设计时,采用了正交体系结构。大部分线索是独立的,不同线索之间不存在相互调用
41、关系。维修收银功能需要涉及维修时的派工、外出服务和维修用料,因此,适当放宽了要求,采用了非完全正交体系结构,允许线索之间有适当的调用,不同线索之间可以共享构件。由于非完全正交结构的范围不大,因此,对整个系统框架的影响可以忽略。o 汽修服务管理系统的体系结构如图所示。其中,系统、维修登记、派工、增加和数据接口形成了一条完整的线索。RIA 体系风格o 随着应用软件业务逻辑越来越复杂,原先的主流显示技术愈发捉襟见肘。为提升用户体验,出现了一种新类型的Internet应用程序,就是 RIA,也称为富互联网应用体系结构风格或富客户体系结构风格。o RIA 将桌面型计算机软件应用的最佳用户界面功能性与We
42、b应用程序的普遍采纳和低成本部署以及互动多媒体通信的长处集于一体,可以提供更直观、响应更快和更有效的用户体验,简化并改进了Web应用程序的用户交互。它不仅具备了桌面型系统的长处,包括在确认和格式编排方面提供互动用户界面、在无刷新页面之下提供快捷的界面响应时间、提供通用的用户界面特性,而且保留了Web的优点,并且支持双向互动声音和图像。o 下图描述了RIA应用程序的层次模型。RIA风格的优点:o(1)强交互性。RIA支持丰富的UI组件。o(2)直接管理。局部的数据更新,通过客户端计算可直接实现对用户请求的响应。o(3)多步骤处理。所有内容在一个界面中添加转换效果,使应用程序的状态在各步骤中轻松移
43、动。o(4)文本独立性。RIA集成XML特性,简化异质系统的通信,方便数据的存取。o(5)平台无关性。应用层次对所有RIA客户端都是一致的。o Ext框架是一个典型的RIA应用于客户端方面的富客户端应用。ExtJS由一系列的类库组成,一旦页面成功加载了ExtJS库后,就可以在页面中通过JavaScript调用ExtJS的类及控件来实现需要的功能。Ext4对框架进行了非常大的重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件,Ext组件是由 Component类定义,每一种组件都有一个指定的xtype属性值,通过该值可以得到一个组件的类型或者是定义一个指定类型
44、的组件o ExtJS运行效果下图所示。表述性状态转移体系结构风格o 表述性状态转移(REST)是Roy Fielding在他的博士论文中发明的一个新名词,是对Web体系结构设计原则的一种描述。REST的目的是决定如何使一个良好定义的Web程序向前推进:一个程序可以通过选择一个带有超链接的Web页面上的链接,使得另一个Web页面(代表程序的下一个状态)返回给用户,使程序进一步运行。如图所示,客户请求用户信息的服务,返回结果页面中包含有该用户的表述。得到返回结果后,客户选择一个链接来决定下一步动作,这样可以做到客户维护自己的程序状态。o REST描述了如何设计和开发分布式系统。对REST的应用只能
45、是理解它,把它的原则应用到Web应用系统的设计中。从正在应用的Web上讲,Web上的每个资源通过一个URI来标识,可以通过简洁通用的接口来操作Web上的资源。资源使用者与资源之间有代理服务器、缓存服务器来解决安全及性能等问题。REST系统中的组件必须是自描述的,这样,客户可根据这些自描述信息来维护自己的程序状态。REST提出了如下设计准则:o 网络上的所有事物都被抽象为资源;o 每个资源对应一个唯一的资源标识符;o 通过通用的连接器接口对资源进行操作;o 对资源的各种操作不会改变资源标识符;o 所有的操作都是无状态的;o REST强调中间媒介的作用。REST体系结构风格的优点:o 统一接口,简
46、化了对资源的操作;o REST的无状态性提高了系统的伸缩性(无状态性使得服务器端可以很容易的释放资源,因为服务器端不必在多个Request中保存状态)和可靠性(无状态性减少了服务器从局部错误中恢复的任务量);o 基于缓存机制,提高了系统的处理性能和负载量;o RESTfulWeb 服务是符合REST风格的轻量级Web服务架构,它以完成业务为目标,将一切与业务相关的事物抽象为资源,并为每个资源赋予一个URI标识,用户在提交请求时,将作用域信息置于URI中,并且使用不同的HTTP方法提交请求,即可对该URI代表的资源执行相关操作,其中常见的HTTP方法为POST、GET、PUT 和DELETE,对
47、应资源的创建、读取、更新和删除操作,简称CRUD 操作。o 作用域信息则通常表现为URI中包含的参数,如http:/xxx?title=book,其中title=book即作用域信息,代表了指定资源中更明确的作用对象。由此可见,URI即资源的统一访问接口,RESTfulWeb服务只要对外界暴露URI即对外发布服务,。REST fulWeb服务的请求和响应如下图所示HTTP 封装数据解析数据封装HTML/XML/TEXT/JSON方法信息判断增数据库HTTP请求HTTP响应URI1URI2HTTP请求HTTP响应读改删客户端服务器端POSTGETPUTDELETE方法插件体系结构风格o 插件(P
48、lug-in)技术是现代软件设计思想的体现,它可以将需要开发的目标软件分为若干功能构件,各构件只要遵循标准接口。整个软件的集成时,只需要将构件进行组装,而不是集成源代码或链接库进行编译与链接;需要新的功能构件时也只需要按规定独立开发,完成后组装到原软件平台中即可使用,实现了一种二进制的软件集成方法。o 插件体系结构有主体部分和扩展部分组成,主体部分完成系统的基本功能,扩展部分完成系统的扩展功能。插件风格中存在两类接口:主体扩展接口和插件接口。主体扩展接口由主体实现,插件只是调用和使用;插件接口由插件实现,主体只是调用和使用。o 插件风格结构如图所示。插件体系结构风格的优点如下:o 实现真正意义
49、上的软件部件的“即插即用”;o 在二进制级上集成软件,避免重新编译内核功能,方便功能扩展和升级;o 能够很好实现软件模块的分工和分期开发;o 有许多这种插件风格的软件系统实例。如Adobe公司的图形处理软件Photoshop。为了提高图形的处理功能,Photoshop提供了标准插件开发接口,这样,第三方软件开发商就可以按标准插件接口开发独具特色的图形功能扩展,开发的插件安装后,系统即可使用,而不影响主程序和其他插件;除此之外,使用插件技术的软件还有IE、Netscape和Macromedia公司的系列软件,以及Microsoft的Visual Studio开发工具及Office办公软件等。目前
50、也有很多支持插件风格的框架技术和标准,比如:OSGI标准等等。面向服务的体系结构o 面向服务的计算(SOC)是基于Internet的新一代分布式计算平台,它把在internet上的大量资源转化为服务,用来作为软件系统应用开发的基本元素。服务是一种粗粒度、可发现、松耦合、自治的分布式组件。服务的这些独特特征,使面向服务的体系结构明显的有别于传统软件架构。o SOA是通过一定的原则来组合一系列可以相互交互的服务进行软件应用开发的一种架构解决方案。SOA本身不是一种具体的技术,而是一个组件模型,一种架构风格。异构体系结构集成o 传统的软件开发过程可以划分从概念到实现的若干个阶段,包括问题定义、需求分