软件架构的风格,即软件架构设计的方法论,我们在软件架构设计的过程中需要遵循和借鉴的好的设计方法。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,一个体系结构定义一个词汇表和一组约束,词汇表包含一些构建和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
软件架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织起来成为一个完整的系统。
下面介绍一些经典的软件架构风格:
1. 管道和过滤器
管道,过滤器风格是Unix系统里面的主要架构设计风格。
每个构件都有一组输入和输出,数据输入构件,经过内部处理,产生数据输出,这种构件叫做过滤器,连接件就是数据传输的管道。
主要特点:
管道是过滤器之间的数据通道。
处理单元是: 过滤器
依赖于过滤器在不同执行架构中的位置:
例如: 相同的进程,过滤器在线程间运行
同一台机器,过滤器在进程中运行
优势
- 简单、直观、高效的构件组合
- 可重用性高
- 易于进化和增强
- 有限并发的可能性
缺点
- 过滤器只能是单输入,单输出类型,系统拓扑结构是线性序列
- 必须就数据格式达成一致
- 有限的应用领域:无状态数据转换
主要应用举例:
A. 编译器
- 输入:源程序
- 词法分析–>句法分析 -->语义分析
- 输出: 可执行文件/共享库
B. UNIX的shell程序
- cat 1.txt|grep abc|sort|uniq >out
- 对1.txt 查找,排序,去重,输出到out.
2. 数据抽象和面向对象组织
建立在数据抽象和面向对象的基础之上。
数据的表示方法以及相应操作被装到一个抽象数据类型中(对象)。
对象通过函数和过程调用来交互。
面向对象风格的优点是:
封装: 对象具有信息隐藏特性,内部结构对外不可见
继承:从具有通用特征的对象开始,逐渐定义更具体的对象
多态:不同类型的对象对相同的基类做出不同的响应
缺点就是:
对象调用必须知道对象标识,只要一个对象的标识改变,就必须显式修改调用他的对象
3. 事件驱动的系统
基于事件驱动的风格又称为隐式调用,构件不直接调用一个过程,而是触发或广播一个或者多个事件,注册这一事件的其他构件就会被调用。
每个构件的接口不仅提供一个过程的集合,也提供一个事件的集合。
一个构件可以注册多个事件,一个事件可以触发对多个构件的调用。
应用场景:
适用于低耦合构件集合的应用程序,例如:
- 用户界面系统中管理数据
- 数据库管理系统中确保数据的一致性
- 在编辑器中支持语法检查
优点:
为软件重用提供强大的支持
为改进系统带来方便
缺点:
- 数据交换的问题
- 构件放弃了对系统计算的控制
4. 分层系统
系统组织为层次结构,每一层为上层提供服务,作为下层的客户,通常不允许跨层交互。
系统中构件在一些层实现了虚拟机功能
连接件通过决定层间如何交互的协议来定义。
主要应用场景:
1 分层通性协议
OSI的7层协议体系结构。
分层协议的优点是:
- 把一个复杂的系统按照递增的步骤进行分解
- 支持功能强
- 支持重用
缺点是:
- 层次划分不太容易
- 很难进行层次的抽象划分。
场景2: 基于微内核模式构建的Windows NT系统。
5. 仓库系统和知识库
适用于无确定求解策略的问题,实际中我们发现许多的复杂问题难以用数学精确的描绘和严格的分析,如: 医疗推理,法律推理,军事分析。
这些问题的解决方法依赖于积累了人类知识和经验的知识库。
知识库体系接口由两种构件组成:
一个中央数据结构,标识当前系统的状态
一个独立构件的集合,对中央数据结构进行操作。
系统中数据和状态的控制方法分两种:
由输入事务选择进行何种处理,并把执行结果作为当前状态存储到中央数据结构中,知识库为传统的数据库型知识库。
由中央数据结构的当前状态决定进行何种处理,知识库为黑板体系结构。
黑板反映一种信息共享的系统,传统应用是信号处理领域。
黑板系统主要应用在: 语音系统和模式识别。
黑板系统举例,一个在线聊天室:
6. C2风格
C2是一种基于构件和消息的架构风格,可用于创建灵活的、可伸缩的软件系统。一个C2构架可以看成是按照一定规则由连接件连接的许多组件组成的层次网络:系统中的构件和连接件都有一个“顶部”和“底部”;一个构件的“顶部”或“底部”可以连接到一个连接件的“底部”或“顶部”;对于一个连接件,和其相连的构件或连接件的数量没有限制,但是构件和构件之间不能直接相连。
共同学习,写下你的评论
评论加载中...
作者其他优质文章