20种软件架构风格

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、管道过滤器风格
(1)特点:①在管道过滤器风格下,每个功能模块都有一组输入和输出。

功能模块称作过滤器;功能模块间的连接可以看作输入、输出数据流之间的通路,称作管道。

②管道-过滤器风格的特性之一在于过滤器的相对独立性,即过滤器独立完成自身功能,相互之间无需状态交互。

③从解耦的角度:每个过滤器之间都是解耦的,每个过滤器都专注于自己的职责。

过滤器是独立运行的组件;过滤器对其处理上下连接的过滤器“无知”;结果的正确性不依赖于各个过滤器运行的先后次序。

(解耦的好处)解耦能够保持组件之间的自主和独立。

它的直接结果就是改动成本低,维护成本低,可读性高。

(2)优点:①由于每个组件行为不受其他组件的影响,整个系统的行为易于理解。

②管道-过滤器风格支持功能模块的复用。

(任何两个过滤器,只要它们之间传送的数据遵守相同的规约,就可以相连接。

)③基于管道-过滤器风格的系统具有较强的可维护性和可扩展性。

④支持一些特定的分析,如吞吐量计算和死锁检测等。

(3)缺点:①管道-过滤器风格往往导致系统处理过程的成批操作。

②根据实际设计的需要,设计者需要对数据传输进行特定的处理(如加密),导致过滤器必须对输入、输出管道中的数据流进行解析和反解析,增加了过滤器具体实现的复杂性。

③交互式处理能力弱。

(4)实例:①传统的编译器,一个阶段的输入是另一个阶段的输出。

②Unix和DOS中的管道操作符‘|’:将符号‘|’之前的命令的输出作为‘|’之后命令的输入。

2、事件驱动风格
(1)基本思想:不直接调用一个过程,而是发布或广播一个或多个事件。

系统中的其它组件通过注册与一个事件关联起来的过程,来表示对某一个事件感兴趣。

当这个事件发生时,系统本身会调用所有注册了这个事件的过程。

这样一个事件的激发会导致其它模块中过程的隐式调用。

(2)从解耦的角度:系统组件松耦合。

在系统执行的过程中,可以并行处理不可预期的事件发生。

观察者模式:让多个观察者对象同时监听某一主题对象,当该对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

(3)特点:①事件发布者不知道哪些组件会受到事件的影响;组件不能对事件的处理顺序,或者事件发生后的处理结果做任何假设。

②从架构上来说,事件驱动系统的组件提供了一个过程集合和一组事件。

③过程可以使用显示的方法进行调用,也可以由组件在系统事件中注册。

当触发事件时,会自动引发这些过程的调用。

④连接件既可以是显示过程调用,也可以是一种绑定事件声明和过程调用的手段。

(4)优点:①事件声明者不需要知道哪些组件会影响事件,组件之间关联较弱。

②提高软件复用能力。

只要在系统事件中注册组件的过程,就可以将该组件集成到系统中。

③系统便于升级。

只要组件名和事件中所注册的过程名保持不变,原有组件就可以被新组件替代。

(5)缺点:①组件放弃了对计算的控制权,完全由系统来决定。

②存在数据交换问题。

③该风格中,正确性验证成为一个问题。

3、黑板风格
(1)特点:①黑板系统是传统上被用于信号处理方面进行复杂解释的应用程序,以及松散耦合的组件访问共享数据的应用程序。

②黑板架构实现的基本出发点是已经存在一个对公共数据结构进行协同操作的独立程序集合。

③黑板系统的命于它反映的是一种信息共享系统——如同教室的黑板一样,有多个人读,也有多个人写。

④数据驱动或状态驱动的控制机制。

系统在运行时,每当有新输入、新结果和新状态写入黑板时,中心控制组件就对黑板上的信息进行评价,并据此协调各专门程序进行工作。

⑤组成部分:知识源、黑板数据结构、控制器。

(2)优点:①便于多客户共享大量数据,他们不关心数据何时有的、谁提供的、怎样提供的。

②既便于添加新的作为知识源代理的应用程序,也便于扩展共享的黑板数据结构。

③知识源可重用。

④支持容错性和健壮性。

(3)缺点:①不同的知识源代理对于共享数据结构要达成一致,而且,这也造成对黑板数据结构的修改较为困难——要考虑到各个代理的调用。

②需要一定的同步/加锁机制保证数据结构的完整性和一致性,增大了系统复杂度。

4、C2风格
(1)特点:①是一种层次体系架构风格。

②C2架构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行组件网络。

该规则规定了所有组件之间的交互必须通过异步消息机制来实现③C2是一种基于组件和消息的架构风格,适用于GUI软件开发,构建灵活和可扩展的应用系统。

(如游戏)④C2架构的内部,通信和处理是分开完成的。

(2)优点:①可使用任何编程语言开发组件,组件重用和替换易实现;②由于组件之间相对独立,依赖较小,因而该风格具有一定扩展能力,可支持不同粒度的组件;③组件不需共享地址空间;④可实现多个用户和多个系统之间的交互;⑤可使用多个工具集和多种媒体类型,动态更新系统框架结构。

(3)缺点:不太适合大规模流式风格系统,以及对数据库使用比较频繁的使用。

5、客户机/服务器风格
(1)特点:①主要针对资源不对等问题而提出的一种共享策略。

②客户机和服务器是两个相互独立的逻辑系统,为了完成特定的任务而形成一种协作关系。

③一般的,客户机为完成特定的工作向服务器发出请求;服务器处理客户机的请求并返回结果。

④客户机程序和服务器程序配置在同一台计算机上时:采用消息、共享存储区和信号量等方法实现通信连接。

⑤客户机程序和服务器程序配置在分布式环境中时:通过远程调用(Remote Produce Call,RPC)协
议来进行通信。

(2)两层C/S架构:
组成:客户机、数据库服务器
优点:①客户机组件和服务器组件分别运行在不同的计算机上,有利于分布式数据的组织和处理。

②组件之间的位置是相互透明的③客户机程序和服务器程序可运行在不同的操作系统上,便于实现异构环境和多种不同开发技术的融合。

④软件环境和硬件环境的配置具有极大的灵活性,易于系统功能的扩展。

⑤将大规模的业务逻辑分布到多个通过网络连接的低成本的计算机上,降低了系统的整体开销。

缺点:①开发成本较高(客户机的软硬件要求高)。

②客户机程序的设计复杂度大,客户机负荷重。

③信息内容和形式单一。

④C/S架构升级需要开发人员到现场更新客户机程序,对运行环境进行重新配置,增加了维护费用。

⑤两层C/S结构采用了单一的服务器,同时以局域网为中心,难以扩展到Internet。

⑥数据安全性不高。

(3)三层C/S架构
组成:客户机、应用服务器、数据库服务器
相比于两层C/S架构的优点:①合理地划分三层结构的功能,可以使系统的逻辑结构更加清晰,提高软件的可维护性和可扩充性。

②在实现三层C/S架构时,可以更有效地选择运行平台和硬件环境,从而使每一层都具有清晰的逻辑结构、良好的负荷处理能力和较好的开放性。

③在C/S架构中,可以分别选择合适的编程语言并行开发。

④系统具有较高的安全性。

使用时需要注意的问题:①如果各层之间的通信效率不高,即使每一层的硬件配置都很高,系统的整体性能也不会太高。

②必须慎重考虑三层之间的通信方法、通信频率和传输数据量,这和提高各层的独立性一样也是实现三层C/S架构的关键性问题。

6、浏览器/服务器风格
(1)特点:①组成:浏览器,Web服务器、数据库服务器②与三层C/S结构的解决方案相比,B/S架构在客户机上采用了WWW浏览器,将Web服务器作为应用服务器。

③B/S架构核心是Web服务器,数据请求、网页生成、数据库访问和应用程序执行全部由Web服务器来完成。

④在B/S架构中,系统安装、修改和维护全在服务器端解决,客户端无任何业务逻辑。

(2)优点1客户端只需要安装浏览器,操作简单,能够发布动态信息和静态信息。

2运用HTTP标准协议和统一客户端软件,能够实现跨平台通信。

3开发成本比较低,只需要维护Web服务器程序和中心数据库。

客户端升级可以通过升级浏览器来实现。

(3)缺点1个性化程度比较低,所有客户端程序的功能都是一样的。

2客户端数据处理能力比较差,加重了Web服务器的工作负担,影响系统的整体性能。

3在B/S架构中,数据提交一般以页面为单位,动态交互性不强,不利于在线事物处理。

4 B/S架构的可扩展性比较差,系统安全性难以保障。

5 B/S架构的应用系统查询中心数据库,其速度要远低于C/S架构。

7、面向服务架构风格SOA
(1)特点:1 SOA 是一个组件模型,它将应用程序的不同功能单元(服务)通过这些服务之间定义良好的接口和契约联系起来。

2基本过程:发布(发布到服务注册中心)->发现->绑定和调用3面向服务软件架构风格在于具有基于标准、松散耦合、共享服务和粗粒度等优势,表现为易于集成现有系统、具有标准化的架构、提升开发效率、降低开发维护复杂度等。

4通过采用SOA架构,在进行一次开发成本急剧减少的同时,由于系统具有松散耦合的特征使得维护成本也大大减少。

(2)优点:1灵活性,根据需求变化,重新编排服务。

2对IT资产的复用。

3使企业的信息化建设真正以业务为核心。

业务人员根据需求编排服务,而不必考虑技术细节。

(3)缺点:1服务的划分很困难。

2服务的编排是否得当。

3如果选择的接口标准有问题,如主流的Web service之类,会带来系统的额外开销和不稳定性。

4对IT硬件资产还谈不上复用。

5目前主流实现方式接口很多,很难统一。

6目前主流实现方式只局限于不带界面的服务的共享。

8、模型-视图-控制器风格(MVC)
(1)特点:1主要是针对编程语言Smalltalk 80所提出的一种软件设计模式。

MVC被广泛的应用于用户交互程序的设计中。

2 MVC结构主要包括模型、视图和控制器三部分。

模型(Model, M):模型是应用程序的核心,它封装了问题的核心数据、逻辑关系和计算功能,提供了处理问题的操作过程。

视图(View,V):视图是模型的表示,提供了交互界面,为用户显示模型信息。

控制器(Controller, C):控制器负责处理用户与系统之间的交互,为用户提供操作接口。

(2)优点:1多个视图与一个模型相对应。

变化——传播机制确保了所有相关视图都能够及时地获取模型变化信息,从而使所有视图和控制器同步,便于维护。

2具有良好的移植性。

由于模型独立于视图,因此可以方便的实现不同部分的移植。

3系统被分割为三个独立的部分,当功能发生变化时,改变其中的一个部分就能满足要求。

(3)缺点:1增加了系统设计和运行复杂性。

2视图与控制器连接过于紧密,妨碍了二者的独立重用。

3视图访问模型的效率比较低。

由于模型具有不同的操作接口,因此视图需要多次访问模型才能获得足够的数据。

4频繁访问未变化的数据,也将降低系统的性能。

9、主程序/子程序风格
(1)特点:1该架构风格从功能的观点设计系统2通过逐步分解和逐步细化得到系统架构,即将大系统分解为若干模块(模块化),主程序调用这些模块实现完整的系统功能3主程序的正确性依赖于它所调用的子程序的正确性。

4其中,组件为主程序和子程序,连接件为调用-返回机制,拓扑结构为层次化结构。

(2)优点:1具有很高的数据访问效率,因为计算共
享同一个存储区。

2不同的计算功能被划分在不同的模块中。

(3)缺点:该方案在处理变更的能力上有许多严重的缺陷。

(1)对数据存储格式的变化将会影响几乎所有的模块。

(2)对处理流程的改变与系统功能的增强也很难适应,依赖于控制模块内部的调用次序。

(3)这种分解方案难以支持有效的复用。

10、面向对象风格
(1)特点:(1)对象负责维护其表示的完整性(通常是通过保持其表示上的一些不变式来实现的)(2)对象的表示对其他对象而言是隐蔽的。

抽象数据类型的使用,以及面向对象系统的使用已经非常普遍。

(3)该架构风格从现实世界中客观存在的事物出发,强调直接以问题域中的事物为中心来思考问题、认识问题,根据这些事物的本质特征,将其抽象为系统中的对象,并作为系统中的基本构成单位。

(2)优点:(1)对象隐藏了其实现细节,所以可以在不影响其它对象的情况下改变对象的实现,不仅使得对象的使用变得简单、方便,而且具有很高的安全性和可靠性。

(2)设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合。

(3)缺点:当一个对象和其它对象通过过程调用等方式进行交互时,必须知道其它对象的标识。

无论何时改变对象的标识,都必须修改所有显式调用它的其它对象,并消除由此带来的一些副作用。

11、层次化风格
(1)特点:在分层系统(Layered System)中,系统被组织成若干个层次,每个层次由一系列组件组成;层次之间存在接口,通过接口形成call/return的关系——下层组件向上层组件提供服务,上层组件被看作是下层组件的客户端
(2)从解耦的角度:1分层架构中的每个层都标记为关闭(closed),即:当请求从一个层移动到另一个层时,它必须经过它正下方的层,以到达该层下面的下一层。

2在经典分层架构设计之前,有两个基本概念需要牢记:(1)高层模块不应该依赖于底层模块,两者都应该依赖于抽象。

(2)抽象不应该依赖于细节,细节应该依赖于抽象。

这也是为了达到高内聚低耦合的设计要求,起到解耦的作用。

(3)优点:(1)支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。

(2)支持扩展。

每一层的改变最多只影响相邻层。

(3)支持重用。

只要给相邻层提供相同的接口,它允许系统中同一层的不同实现相互交换使用。

(4)缺点:(1)不是所有系统都容易用这种模式来构建;(2)定义一个合适的抽象层次可能会非常困难,特别是对于标准化的层次模型。

例如,实际的通信协议体就很难映射到ISO框架中,因为其中许多协议跨多个层。

12、解释器风格
(1)基本思想:解释器(Interpreter) 是一个用来执行其他程序的程序,它针对不同的硬件平台实现了一个虚拟机,将高抽象层次的程序翻译为低抽象层次所能理解的指令,以弥合程序语义所期望的与硬件提供的计算引擎之间的差距。

(2)优点:◦(1)它有利于实现程序的可移植性和语言的跨平台能力;◦(2)可以对未来的硬件进行模拟和仿真,能够降低测试所带来的复杂性和昂贵花费
(3)缺点:◦额外的间接层次导致了系统性能的下降,如在不引入JIT(Just In Time)技术的情况下,Java 应用程序的运行速度相当慢。

13、基于规则的系统风格
(1)特点:1把频繁变化的业务逻辑抽取出来,形成独立的规则库。

这些规则可独立于软件系统而存在,可被随时的更新。

系统运行时,读取规则库,依据当前运行状态,从规则库中选择与之匹配的规则,对规则进行解释,根据结果控制系统运行的流程。

2基于规则系统提供了一种基于专家系统解决问题的手段,将知识表示为“条件-行为”的规则,当满足条件时触发相应的行为,而不是将这些规则直接写在程序源代码中。

(2)与解释器风格比较:相同点:基于规则的系统本质上是与解释器风格一致的,都是通过“解释器”(“规则引擎”),在两个不同的抽象层次之间建立起一种虚拟的环境。

不同点:基于规则的系统:在自然语言/XML 的规则和高级语言的程序源代码之间建立虚拟机环境;解释器风格的系统:在高级语言程序源代码和OS/硬件平台之间建立虚拟机环境。

(3)优缺点:同解释器风格
14、仓库风格
(1)基本思想:仓库是存储和维护数据的中心场所。

◦仓库式风格的两种组件:中央数据结构组件件、相对独立的组件集合
(2)优点:◦便于模块间的数据共享◦方便模块的添加、更新和删除◦避免了知识源的不必要的重复存储等。

(3)缺点:对于各个模块,需要一定的同步/加锁机制保证数据结构的完整性和一致性等。

15、平台/插件风格
(1)特点:“平台/插件”软件结构将待开发的目标软件分为两部分:◦程序的主体或主框架,可定义为平台◦功能扩展或补充模块,可定义为插件。

1插件(Plug-in)是一种遵循统一的预定义接口规约编写出来的程序,应用程序在运行时通过接口规约对插件进行调用,以扩展应用程序的功能。

插件的本质在于不修改程序主体(或者程序运行平台)的情况下对软件功能进行扩展与加强。

这意味着软件开发者可以通过公布插件的预定义接口规约,从而允许第三方的软件开发者通过开发插件对软件的功能进行扩展,而无须对整个程序代码进行重新编译。

2平台所完成的功能应为一个软件系统的核心和基础,可以把平台基本功能分为两个部分:◦内核功能:是整个软件的重要功能,一个软件的大部分功能因由内核功能完成。

◦插件处理功能:用于扩展平台和管理插件,为插件操纵平台
和与插件通信提供标准平台扩展接口。

(2)优点:(1)降低系统各模块之间的互依赖性◦(2)系统模块独立开发、部署、维护(3)根据需求动态的组装、分离系统
(3)缺点:插件是别人开发的可以用到某主程序中的,只服务于该主程序,可重用性差。

16、面向Agent风格
(1)特点:1面向Agent风格的一个重要特点,就是编程时不再仅仅只是用对象的思维来考虑问题,而是要更进一步,用Agent智能体的思维去考虑问题。

2面向Agent风格(Agent-oriented)的基本思想是认为事物的属性,特别是动态特性在很大程度上受到与其密切相关的人和环境的影响,将影响事物的主观与客观特征相结合抽象为系统中的Agent,作为系统的基本构成单位,通过Agent 之间的合作实现系统的整体目标。

(2)优点:面向Agent的软件工程方法对于解决复杂问题是一种好的技术, 特别是对于分布开放异构的软件环境。

(3)缺点:大多数结构中Agent 自身缺乏社会性结构描述和与环境的交互。

17、面向方面软件架构风格
(1)基本思想:◦一般认为AOP在传统软件架构基础上增加了方面组件(Aspect Component)这一新的构成单元,通过方面组件来封装系统的横切关注点。

◦系统的有些特性和需求是横切于系统的每一个层面中,并融于系统的每一个组件中,这种特性称为系统的方面(Aspect)需求特性或关注点如系统中的时间要求、业务逻辑、性能、安全性和错误检测、QoS 监测等。

◦一个复杂的软件系统可以看作是由许多关注点的实现构成的。

(2)优缺点分析:◦可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型◦AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。

◦它会和面向对象编程可以很好地合作,互补
18、正交架构风格
(1)组成:由组织层和线索的组件构成。

◦层是由一组具有相同抽象级别(Level of Abstraction)的组件构成。

◦线索是子系统的特例,它是由完成不同层次功能的组件组成(通过相互调用来关联),每一条线索完成整个系统中相对独立的一部分功能。

◦如果线索是相互独立的,即不同线索中的组件之间没有相互调用,那么这个结构就是完全正交的。

(2)基本思想:正交软件架构是一种以垂直线索组件族为基础的层次化结构。

其基本思想是把应用系统的结构按功能的正交相关性,垂直分割为若干个线索(子系统),线索又分为几个层次,每个线索由多个具有不同层次功能和不同抽象级别的组件构成。

(3)特点:(1)由完成不同功能的n(n>1)个线索(子系统)组成;(2)系统具有m(m >1)个不同抽象级别的层;(3)线索之间是相互独立的(正交的);(4)系统有一个公共驱动层(一般为最高层)和公共数据结构(一般为最低层)。

(4)优点:(1)结构清晰,易于理解。

由于线索功能相互独立,组件的位置可以清楚地说明它所实现的抽象层次和负担的功能。

(2)易修改,可维护性强。

由于线索之间是相互独立的,所以对一个线索的修改不会影响到其他线索。

(3)可移植性强,重用粒度大。

因为正交结构可以为一个领域内的所有应用程序所共享,这些软件有着相同或类似的层次和线索,可以实现架构级的重用。

(5)缺点:在实际应用中,并不是所有软件系统都能完全正交化,或者有时完全正交化的成本太高。

因此,在进行应用项目的软件架构设计时,必须反复权衡进一步正交化的额外开销与所得到的更好的性能之间的关系。

19、异构风格
(1)特点:在实际应用中,各种软件架构并不是独立存在的,在一个系统中,往往会有多种架构共存和相互融合,形成更复杂的框架结构,即异构架构。

异构架构是几种风格的组合,组合方式可能有如下几种:(1)使用层次结构。

一个系统组件被组织成某种架构风格,但它的内部结构可能是另一种完全不同的风格。

(2)允许单一组件使用复合的连接件。

(2)优点:(1)选择异构架构风格,可以实现遗留代码的重用。

(2)在某一单位中,规定了共享软件包和某些标准,但仍会存在解释和表示习惯上的不同。

选择异构架构风格,可以解决这一问题。

(3)缺点:◦不同风格之间的兼容问题有时很难解决20、基于层次消息总线的架构风格
(1)特点:以青鸟软件生产线的实践为背景,提出了基于层次消息总线的软件架构JB/HMB风格基于层次消息总线、支持组件的分布和并发,组件之间通过消息总线进行通讯。

消息总线是系统的连接件,负责消息的分派、传递和过滤以及处理结果的返回。

各个组件挂接在消息总线上,向总线登记感兴趣的消息类型。

(2)优点:(1)JB/HMB风格的构件接口是一种基于消息的互联接口,可以较好地支持架构设计。

降低了构件之间的耦合性,增强了构件的重用性。

(2)JB/HMB风格支持运行时系统演化,主要体现在可动态增加和删除构件,动态改变构件所响应的消息以及消息过滤这三个方面。

(3)缺点:重用要求高,可重用性差。

相关文档
最新文档