软件体系结构风格之一

1. 管道和过滤器风格

【数据流风格,因为管道里都是数据流】


(1)构件:过滤器。它对输入流进行处理、转换。处理后的结果在输出端流出。

【过滤器之间是相互独立的,无需进行状态信息的交互(主要特点)。每个过滤器都有输入输出,过程是:输入流->进行处理->输出流】

(2)连接件:管道。位于过滤器之间,起到信息流的导管作用。

(3)优点:

a. 使得软构件具有良好的隐蔽性和高内聚、低耦合的特点,系统中已有的过滤器很容易用于新的待设计系统。

【隐蔽性:构件本身是封装好的实体              高内聚、低耦合:因为构件彼此之间是独立的】

b. 允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成

【便于划分功能】

c. 支持软件重用。

【只需要控制过滤器的输入流,就可以将两个过滤器连接起来】

d. 具有较强的可维护性和可扩展性。

【可维护性:更新和升级--增加、修改过滤器,只需要考虑涉及到的过滤器,其他不相关的不受影响】

【可扩展性:添加新的功能,只需要在原有基础上添加新的端口】

e. 支持并行执行。

【构件之间相互独立,所以可以并行执行】

f. 为系统的性能分析提供了方便。

【吞吐量、死锁、计算机正确性等属性】

(4)缺点:

a. 通常导致进程成为批处理的结构。

【过滤器是对输入的批量转换处理,对输入和输出有相应的说明限制】

b. 不适合交互应用要求高的情况

【过滤器对输入流有着严格的限制】

c. 因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。

(5)例子:

Unix的Shell程序

Cat file | grep xyz | sort |uniq>out

系统先在文件中查找含有xyz的行,排序,然后去掉相同的行,最后结果放到out中

2. 面向对象的体系结构风格

【这是一种调用/返回风格】


(1)构件:对象,或者说是抽象数据类型的实例。

        连接件:通过函数和过程的调用。

(2)优点:

a. 信息隐藏保证了对象行为的可靠性。

【用户只能通过函数调用来影响一个对象,避免了访问的随意性】

b. 受封装的独立运行对象把数据和操作捆绑在一起,提高了对象作为一种模块的内聚力,使系统分解成相互作用又相对独立的对象集合。

c. 对象方法的调用将操作请求和实现细节实现分离,使得可能在不影响使用者的情况下改变操作的实现,为系统的维护升级提供了便利的条件。

d. 对象可以是多线程的,也可以是单线程的

【对象之间通过函数和过程的调用相互影响】

(3)缺点:

a. 为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。

【如果一个对象标识改了,所有地方都要改】

b. 不同对象的操作关联性弱。

【如果两个对象同时访问另一个对象,彼此之间可能会互相影响】

c. 采用面向对象,分解出的是小粒度的基本类或对象。从系统总体结构到构件的设计,缺乏有效的描述和设计方法。

【就是一开始做体系结构设计,分解出的构件很难做到对象这么精准】

3. 基于事件的风格

【这是一种独立构件风格,构件之间彼此都不知道】

(1)构件:一些模块,模块既可以是一些过程,又可以是一些事件的集合。

(2)构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。

【构件触发或者广播事件->调用在这个事件中注册的所有过程(包括一些构件)】

(3)过程可以用通用的方式调用,也可以在系统事件中注册一些过程,当发生这些事件时,过程被调用。

(4)特点: 这种风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用。

【这里说的是隐式调用】

(5)优点:

a. 为软件重用提供了强大的支持。当需要将一个构件加入现存系统中时,只需将它注册到系统的事件中。

b. 为改进系统带来了方便。当用一个构件代替另一个构件时,不会影响到其它构件的接口。

【构件之间相互独立】

c. 事件广播者不必知道哪些部件将会被调用,部件之间的关系将弱化。

【降低了构件之间的耦合性】

(6)缺点:

a. 构件放弃了对系统计算的控制。

【构件只知道自己需要调用的事件,不知道涉及的其他构件和它们的顺序】

b. 数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。

c. 很难对系统正确性进行推理。

【Debug有问题】

(7)例子:

在某系统中,编辑器和变量监视器可以登记相应Debugger的断点事件。当Debugger在断点处停下来时,它声明该事件,由系统自动调用处理程序。

【Debugger本身只声明事件,并不关心哪些过程会启动,也不关心这些过程做什么处理。】

4. 分层的体系结构风格

【这是一种调用/返回风格】


(1)连接件:通过决定层间如何交互的协议来定义。

        拓扑约束:包括对相邻层间交互的约束。

(2)分层风格有助于将任务分解成多个子任务组,其中每个子任务组处于某个特定的抽象层次上。

(3)层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。最上层只调用下层提供的函数功能,最底层只负责为直接相邻的上层提供服务。

(4)在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。

【由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,这为软件重用提供了强大的支持。】

(5)这种风格支持基于可增加抽象层的设计。允许将一个复杂问题分解成一个增量步骤序列的实现。

【就是对问题可以横向分解和纵向分解结合】

(6)优点:

a. 支持基于抽象程度递增的系统设计

【就是可以由简单到复杂】

b. 支持功能增强

【因为每一层基本只影响相邻两层,所以对功能的修改最多影响相邻两层】

c. 支持重用。

【层与层之间通过服务接口进行交互,所以只要接口不变,层就可以重用】

(7)缺点:

a. 并不是每个系统都可以很容易地划分为分层的模式,有时候为了性能考虑,要把一些综合起来。

b. 效率低下。

【上面的层过分依赖下面的层提供服务,相关数据传达的时间长】

c. 缺少公认合适的、正确的层次抽象方法。

【层次太少,分层不能完全发挥这种风格的可重用性、可更改性和可移植性上的潜力。层次太少,会引入不必要的复杂性和层间隔离冗余以及层间传输的开销。】

5. 仓库风格

(1)构件:中央数据结构说明当前状态,独立构件在中央数据存贮上执行。

(2)控制原则的选取产生两个主要的子类。

        若输入流中某类时间触发进程执行的选择,则仓库是一传统型数据库;

        若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。

6. 黑板系统

【是一种仓库风格】


(1)组成元素:

知识源:包含独立的、与应用程序相关的知识。

黑板数据:是按照与应用程序相关的层次来组织的解决问题的数据。知识源通过不断的改变黑板数据来解决问题。

黑板:保存着系统的输入、问题求解各个阶段的中间结果和反映整个问题的求解状态。

【知识之间不直接通信,它们之间的交互通过黑板完成】

控制:完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。

(2)应用:传统应用是信号处理领域,如语音和模式识别,另一应用是松耦合代理数据共享存取�。

7. C2(Component and Connector)风格


(1)C2风格是一种基于构件和消息的体系结构风格,用于构件灵活的、可扩展的软件系统。C2对具有图形用户界面的应用有良好的支持。

(2)C2风格的体系结构是一个层次网络,这个网络由相互协作的构件和负责将它们链接在一起的连接件按照一套风格规则组成。

【也可以理解为通过连接件绑定在一起的按照一组规则运作的并行构件网络。】

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

(4)构件与构件之间的直接连接是不允许的,连接件和连接件之间可以直接连接。

(5)中心原则:有限可视原则,或者说是与下层独立的原则。

【某一构件只能感知层次高于自己的构件所提供的服务,而不能感知到层次比自己更低的构件的服务】

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

【以连接件为中介:构件之间不能直接通讯】

(7)特点:

a. 基于构件的风格。

b. 可扩展性。

c. 适应性

【可同时有多个用户进行交互】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 体系结构 = 组件 + 连接件 + 约束 软件体系结构的核心概念: 构/组件 软件重用 构件: 语义完整、语法正确...
    pianosecret阅读 2,764评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,857评论 6 13
  • 体系风格 如武林门派各有异长之处,其所长即是风格体现。对于软件体系来说"每一套体系风格里装载着独特的结构、语义特性...
    哒哒luada阅读 942评论 0 1
  • 且让我分担你的忧愁(一) 20160925 今天早饭后,是君子兰班的晨诵时间,本来早上起床后有20分钟时间挺好的,...
    河南麦子的书写阅读 700评论 0 1