几种常用软件架构设计指引_第1页
几种常用软件架构设计指引_第2页
几种常用软件架构设计指引_第3页
几种常用软件架构设计指引_第4页
几种常用软件架构设计指引_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、几种常用软件架构设计指南软件架构(softwarearchitectures)是一系列相关的抽象模式, 用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。软件体系结构的定义虽然软件体系结构已经在软件工程领域中有着广泛的应用,但迄今为止还没有一个被大家所公认的定义。许多专家学者从不同角度和不同侧面对软件体系结构进行了刻画,较为典型的定义有:DewaynePerry 和

2、AlexWolf 曾这样定义: 软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。MaryShaw 和 DavidGarlan 认为软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。体系结构问题包括总体组织和全局控制、通讯协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案间进行选择等。软件体系结构处理

3、算法与数据结构之上关于整体系统结构设计和描述方面的一些问题,如全局组织和全局控制结构、关于通讯、同步与数据存取的协议,设计构件功能定义,物理分布与合成,设计方案的选择、评估与实现等Kruchten 指出,软件体系结构有四个角度,它们从不同方面对系统进行描述:概念角度描述系统的主要构件及它们之间的关系;模块角度包含功能分解与层次结构;运行角度描述了一个系统的动态结构;代码角度描述了各种代码和库函数在开发环境中的组织。HayesRoth 则认为软件体系结构是一个抽象的系统规范, 主要包括用其行为来描述的功能构件和构件之间的相互连接、接口和关系。DavidGarlan 和 DewnePerry 于

4、1995 年在 IEEE 软件工程学报上又采用如下的定义:软件体系结构是一个程序/系统各构件的结构、它们之间的相互关系以及进行设计的原则和随时间进化的指导方针。BarryBoehm 和他的学生提出,一个软件体系结构包括一个软件和系统构件,互联及约束的集合;一个系统需求说明的集合;一个基本原理用以说明这一构件,互联和约束能够满足系统需求。1997 年,Bass,Ctements 和 Kazman 在使用软件体系结构一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。其中,软件外部的可见特性”是指软件构件提供的服务、性能、特性、错误

5、处理、共享资源使用等。软件体系结构建模研究软件体系结构的首要问题是如何表示软件体系结构, 即如何对软件体系结构建模。根据建模的侧重点的不同,可以将软件体系结构的模型分为 5 种:结构模型、框架模型、动态模型、过程模型和功能模型。在这 5 个模型中,最常用的是结构模型和动态模型。结构模型这是一个最直观、最普遍的建模方法。这种方法以体系结构的构件、连接件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质。研究结构模型的核心是体系结构描述语言。框架模型框架模型与结构模型类似, 但它不太侧重描述结构的细节而更侧重于整体的结构。框架模型主要以一

6、些特殊的问题为目标建立只针对和适应该问题的结构。动态模型动态模型是对结构或框架模型的补充, 研究系统的“大颗粒”的行为性质。 例如,描述系统的重新配置或演化。动态可能指系统总体结构的配置、建立或拆除通信通道或计算的过程。这类系统常是激励型的。过程模型过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本的结果。功能模型该模型认为体系结构是由一组功能构件按层次组成,下层向上层提供服务。它可以看作是一种特殊的框架模型。这 5 种模型各有所长,也许将 5 种模型有机地统一在一起,形成一个完整的模型来刻画软件体系结构更合适。例如,Kruchten 在 1995 年提出了一个4+1”的视角模型。4

7、+1”模型从 5 个不同的视角包括逻辑视角、过程视角、物理视角、开发视角和场景视角来描述软件体系结构。每一个视角只关心系统的一个侧面,5 个视角结合在一起才能够反映系统的软件体系结构的全部内容静态结构图 1“4+1”视图模型逻辑架构逻辑架构主要支持功能性需求一一即在为用户提供服务方面系统所应该提供的功能。系统分解为一系列的关键抽象,(大多数)来自于问题域,表现为对象或对象类的形式。它们采用抽象、封装和继承的原理。分解并不仅仅是为了功能分析,而且用来识别遍布系统各个部分的通用机制和设计元素。我们使用 Rational/Booch 方法来表示逻辑架构,借助于类图和类模板的手段。类图用来显示一个类的

8、集合和它们的逻辑关系:关联、使用、组合、继承等等。相似的类可以划分成类集合。类模板关注于单个类,它们强调主要的类操作,并且识别关键的对象特征。如果需要定义对象的内部逻辑视图进程视图开发人员:功能实现场工视图动部吉构物理视图开发视图最终同户:功能芾求系统J程师:系统拓扑.部宾系统集成人枭:非功能需.求行为,则使用状态转换图或状态图来完成。公共机制或服务可以在类功能(classutilities)中定义。对于数据驱动程度高的应用程序,可以使用其他形式的逻辑视图,例如 E-R 图,来代替面向对象的方法(OOapproach)。ConnectorsAssociation.ContainmentOUs珥

9、聚 inheritancerkiatwncj刁Hon图 2 逻辑视图表示符号开发架构开发架构关注软件开发环境下实际模块的组织。 软件打包成小的程序块(程序库或子系统),它们可以由一位或几位开发人员来开发。子系统可以组织成分层结构,每个层为上一层提供良好定义的接口。系统的开发架构用模块和子系统图来表达,显示了输出和输入关系。完整的开发架构只有当所有软件元素被识别后才能加以描述。但是,可以列出控制开发架构的规则:分块、分组和可见性。ReferenceCompiJatrORdependency(includewrthp,ConnectorsComponentsClassParameterizedC匕

10、&aCla55cjtogoryComponentsLayer图 3 开发视图的标识符号进程架构进程架构考虑一些非功能性的需求,如性能和可用性。它解决并发性、分布性、系统完整性、容错性的问题,以及逻辑视图的主要抽象如何与进程结构相配合在一起-即在哪个控制线程上,对象的操作被实际执行。进程架构可以在几种层次的抽象上进行描述,每个层次针对不同的问题。在最高的层次上,进程架构可以视为一组独立执行的通信程序(叫作processes)的逻辑网络,它们分布在整个一组硬件资源上,这些资源通过 LAN 或者 WAN 连接起来。多个逻辑网络可能同时并存,共享相同的物理资源。例如,独立的逻辑网络可能用于支持

11、离线系统与在线系统的分离,或者支持软件的模拟版本和测试版本的共存。ConnectorsU11与pe-cIfhd Mas-甥R牛mowPrcGdureCall-AMeasage.bidlrecthnal EventbroadestiIndicateswcyclicalprocess图 4 进程视图的标识符号物理架构物理架构主要关注系统非功能性的需求,如可用性、可靠性(容错性),性能(吞吐量)和可伸缩性。软件在计算机网络或处理节点上运行,被识别的各种元素(网络、过程、任务和对象),需要被映射至不同的节点;我们希望使用不同的物理配置:一些用于开发和测试,另外一些则用于不同地点和不同客户的部署。因此软

12、件Components5impiiTidProcessprocessadornment至节点的映射需要高度的灵活性及对源代码产生最小的影响。图 5 物理视图的标识符号场景架构四种视图的元素通过数量比较少的一组重要场景(更常见的是用例)进行无缝协同工作,我们为场景描述相应的脚本(对象之间和过程之间的交互序列)。在某种意义上场景是最重要的需求抽象,它们的设计使用对象场景图和对象交互图来表示。该视图是其他视图的冗余(因此+1”),但它起到了两个作用:作为一项驱动因素来发现架构设计过程中的架构元素。作为架构设计结束后的一项验证和说明功能,既以视图的角度来说明又作为架构原型测试的出发点。场景表示法与组件

13、逻辑视图非常相似(请对照图 2),但它使用过程视图的连接符来表示对象之间的交互(请对照图 4),注意对象实例使用实线来表达。管道过滤器风格软件架构在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体,它不能与其它的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。一个管道/过滤器网络输出的正

14、确性并不依赖于过滤器进行增量计算过程的顺序。C+nr*ociorsCon-iniiinicjlionIjrK-*CollininmcalioniIFKVIp?rmarKiihLtaidi4比事闻上日iHEuniwtMhCcmporipfittboPidwiLlttacijmiTiunicjlhcihLPrccff-tsor图 6 管道过滤器体系结构图 7 数字通信系统粗略模型管道/过滤器风格的软件体系结构具有许多很好的特点:使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;支持软件重用。重要提供适合在两个过滤器之间传送的数据

15、,任何两个过滤器都可被连接起来;系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;允许对一些如吞吐量、死锁等属性的分析;支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。但是,这样的系统也存在着若干不利因素。通常导致进程成为批处理的结构。 这是因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。不适合处理交互的应用。当需要增量地显示改变时,这个问题尤为严重。因为在数据传输上没有通用的标准, 每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过

16、滤器的复杂性。层次风格软件架构层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。图 8 是层次系统风格的示意图。层次系统最广泛的应用是分层通信协议。在这一应用领

17、域中,每一层提供一个抽象的功能,作为上层通信的基础。较低的层次定义低层的交互,最低层通常只定义硬件物理连接。名种相付图 8 层次系统体系结构层次系统有许多可取的属性:支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;支持重用。只要提供的服务接口定义不变,同?葭组标准的接口,而允许各种不同的实现方法。但是,层次系统也有其不足之处:并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;很

18、难找到一个合适的、正确的层次抽象方法。三层应用程序模式是我们最常用的模式之一。当我们在准备使用层来组织应用程序的方式构件一个业务解决方法,如何组织应用程序以便重用业务逻辑、提供部署灵活性并保留重要的资源连接,这就可以用三层应用程序模式。表现层:这一层负责与用户的交互。提供服务,显示信息(例如在 windows 或 HTML页面中,处理用户请求(鼠标点击,键盘敲击等),HTTP 请求,命令行调用。)业务层:逻辑,系统中真正的核心。业务层实现应用程序的业务功能。数据访问层:与数据库、消息系统、事务管理器及其其他软件包通信。图 10 四层软件架构MVC 模式MVC 模式(Model-View-Con

19、troller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)图 9 三层软件架构盯叱胆务器层 i 网用服务搀星散据凰施 b 眼外褥-底利服势器并集也抵仓 KMVC 模式最早由 TrygveReenskaugft1974 年1提出,是施乐帕罗奥多研究中心(XeroxPARC)在 20 世纪 80 年代为程序语言 Smalltalk 发明的一种软件设计模式。MVC 模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更

20、加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。图 11MVC 架构模型(Model)“数据模型(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。视图(View)视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了

21、实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。控制器(Controller)控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。MVC 模式的优点在最初的 JSP 网页中,像数据库查询语句这样的数据层代码和像 HTML 这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC 从根本上强制性地将它们分开。 尽管构造 MVC 应用程序需要一些额外的工作, 但是它带给我们的好处是毋庸置疑的。首先,多个视图能共享一个模型。如今,同一个 Web 应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求 Web 网站同时能提供 Internet 界面和 WAP 界面。在 MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论