不错,去看看中文图书全场满【99】元赠畅销书。。。

几种常见的软件架构风格介绍

软件体系结构设计的一个核心目标是提炼重复的体系结构模式,以实现体系结构层面的软件重用,使得我们可以在不同的软件系统中使用一些惯用的体系结构。基于这个目的,去研究和实践软件体系结构的风格和类型是非常有必要的。

所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式。架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来。软件架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将系统中的各个模块和子系统有机的结合为一个完整的系统。

经典软件架构风格

1.管道和过滤器

在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,数据输入构件,经过内部处理,然后将处理过的数据输出。这里处理数据的构件就被称为过滤器,而这种风格的连接件就像是传输数据的管道一样,“管道/过滤器”风格也正因此而得名。

管道过滤器风格 (Pipes and Filters)

管道/过滤器风格一个典型的应用是在编译系统中。一个普通的编译系统包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等一系列对源程序进行处理的过程。人们可以将编译系统看作一系列过滤器的连接体,按照管道-过滤器的体系结构进行设计。

2.事件驱动风格

事件驱动系统风格中,构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册。当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。这种风格常用于界面设计之中。

3.层次化设计风格

层次系统组成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。这样的系统中构件在层上实现了虚拟机。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。

层次化设计风格示意图

4.面向对象风格(抽象数据)

抽象数据类型概念对软件系统有着重要作用,目前软件界已普遍转向使用面向对象系统。这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。

5.仓库风格

仓库(repository)风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。一方面,若构件控制共享数据,则仓库是一传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统

黑板系统示意图

这里的黑板代表一个公共的知识库,在一个问题从提出到问题被解决的过程中,被不同的专家知识源反复更新。就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家。黑板模式的应用场景是要解决的任务可以分为多个子任务,该模型往往用来处理复杂、模糊的问题。黑板模式的优势在于可用于非确定性问题求解,启发式解决过程,可维护性,可重用。但是它也有自身的局限性,比如:不能确保期望结果,效率低下,回退,不支持并行,共享空间的访问需要同步。

6.C2风格(Component and Connector)

C2风格是一种基于构件和消息的体系结构风格,用于构件灵活的、可扩展的软件系统,这种模式对具有图形用户界面的应用有良好的支持。C2体系结构风格可以概括为通过连接件绑定在一起按照一组规则运作的并行构件网络。C2风格的体系结构是一个层次网络,其中的各部分需要遵循如下的规则:

(1)系统中的构件和连接件都有一个顶部和一个底部。

(2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部。连接件和连接件之间可以直接连接,而构件与构件之间的直接连接是不允许的。

(3)一个连接件可以和任意数目的其他构件和连接件连接。

(4)某一构件只能感知层次高于自己的构件所提供的服务,而不能感知到层次比自己更低的构件的服务。 C2架构风格最重要的特性就是“底层无关性”,这在构件的可替代性和可重用性方面具有显著的作用。

(5)通信规则:所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的;消息是构件之间唯一通信途径。(以连接件为中介:构件之间不能直接通讯)

7.客户端/服务器风格(C/S)

客户端/服务器(C/S),可以说是一种大家熟知的结构,在信息产业中占有重要的地位。C/S软件体系结构是基于资源不对等且实现共享而提出,是在20世纪90年代逐渐成熟的技术,C/S体系结构定义了客户端如何与服务器相连,实现部分数据和应用分布到多个处理机上。

C/S体系结构有三个主要组成部分:服务器、客户应用程序和网络。这种结构的系统把较复杂的计算和管理任务交给网络上的高档机器——服务器,而把一些频繁与用户打交道的任务交给前端较简单的计算机—客户机。通过这种方式,将任务合理分配到客户端和服务器端,既充分利用了两端硬件环境的优势,又实现了网络上信息资源的共享。由于这种结构比较适于局域网运行环境,因此逐渐得到了广泛的应用。

典型的C/S架构风格

C/S体系结构的优点主要在于系统的客户应用程序和服务器构件分别运行在不同的计算机上,系统中每台服务器都可以适合各构件的要求,这对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小。在C/S体系结构中,系统中的功能构件充分隔离,客户应用程序的开发集中于数据的显示和分析,而数据库服务器的开发则集中于数据的管理,不必在每一个新的应用程序中都要对一个DBMS进行编码。将大应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。

C/S体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。但随着企业规模的日益扩大,软件的复杂程度不断提高,C/S体系结构逐渐暴露了以下缺点

  • (1)开发成本较高。C/S体系结构对客户端软硬件配置要求较高,尤其是软件的不断升级,对硬件要求不断提高,增加了整个系统的成本,且客户端变得越来越臃肿。
  • (2)客户端程序设计复杂。采用C/S体系结构进行软件开发,大部分工作量放在客户端的程序设计上,客户端显得十分庞大。
  • (3)信息内容和形式单一。因为传统应用一般为事务处理,界面基本遵循数据库的字段解释,开发之初就已确定,而且不能随时截取办公信息和档案等外部信息,用户获得的只是单纯的字符和数字,既枯燥又死板。
  • (4)用户界面风格不一,使用繁杂,不利于推广使用。
  • (5)软件移植困难。采用不同开发工具或平台开发的软件一般互不兼容,不能或很难移植到其他平台上运行。
  • (6)软件维护和升级困难。采用C/S体系结构的软件要升级,开发人员必须到现场为客户机升级,每个客户机上的软件都需维护。对软件的一个小小改动(例如只改动一个变量),每一个客户端都必须更新。

8.三层C/S结构风格

三层C/S架构中,相较于普通的C/S架构增加了一个应用服务器,将整个系统分为表示层、功能层、数据层。通过将整个应用逻辑驻留在应用服务器上,客户机只保留表示层,实现典型的“瘦客户机”,从而使整个C/S结构获得一定的提升。

典型的三层C/S架构

1)表示层

表示层是应用的用户接口部分担负与应用逻辑间的对话功能。它用于用户从工作站输入的数据,并显示应用输出的数据。为使用户能直观地进行操作,一般要使用图形用户界面(GraphicUserInterface,GUI),在变更用户界面时,只需改写显示控制和数据检查程序,而不影响业务逻辑。

2)功能层

功能层是应用的本体,它负责具体的业务处理逻辑,例如在制作订购合同时要计算合同金额。表示层和功能层之间的数据互交要尽可能简洁。例如,用户检索数据时,要将有关检索要求的信息一次性地传送给功能层,检索结果数据也由功能层一次性地传送给表示层。

3)数据层

数据层通常是数据库管理系统,负责管理对数据库数据的读写。数据库系统必须能迅速执行大量数据的更新和检索。三层C/S的解决方案对这三层进行明确分割,不同层构件相互独立,层间的接口简洁,适合复杂事务处理。

9.浏览器/服务器(B/S风格)

浏览器/服务器(browser/server,B/S)是一种三层应用结构的一种实现方式,其具体结构为浏览器/Web服务器/数据库服务器。客户端采用WWW浏览器,应用服务器是Web服务器。

使用B/S架构有如下几个好处:

  • B/S体系结构主要是利用不断成熟的WWW浏览器技术,结合浏览器的多种脚本语言,用通用浏览器就实现了原来需要复杂的专用软件才能实现的强大功能,节约了开发成本。
  • 基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。
  • 用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块。从而真正达到“零客户端”的效果,升级维护十分方便。

当然,B/S结构也有一些不足的地方:

  • B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
  • 系统扩展能力差,安全性相对难以控制。
  • 采用B/S体系结构的应用系统,数据查询速度往往远低于C/S体系结构。
  • B/S架构的数据提交一般以页面为单位,数据动态交互性不强,不利于在线事物处理。

基于C/S和B/S两种架构风格各自的特点,应用系统很多时候会以C/S和B/S两种架构混合应用的形式出现,以充分利用两种模式的优势,以满足不同的应用需求。如下图:

C/S与B/S混合的体系结构

评论一下...

电子邮件地址不会被公开。 必填项已用*标注