架构风格 | 定义 | 代表 |
1. 数据流风格 | 面向数据流,按照一定的顺序从前向后执行 | 批处理序列 管道-过滤器 |
2. 调用/返回风格 | 构件之间存在显式的互相调用关系 | 主程序/子程序 面向对象 层次结构 |
3. 独立构件风格 | 构件之间相互独立,不存在显式的调用关系,而是通过某个事件触发、异步的方式来执行(隐式调用) | 进程通信 事件驱动系统 |
4. 虚拟机风格 | 自定义一套规则,使用者基于这个规则来开发构件,能够跨平台适配 | 解释器 基于规则的系统 |
5. 仓库风格 | 以数据为中心,所有的操作都是围绕建立的数据中心进行的 | 数据库系统 超文本系统 黑板系统 |
1. 数据流风格
-
批处理序列:构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体为单位的方式传递。传统编译器。
-
管道-过滤器:每个构件都有一组输入数据流和输出数据流。前一个构件的输出作为后一个构件的输入,前后数据流关联,前面执行到部分可以开始下一个的执行。过滤器(构件)、管道(连接件)。典型就是流媒体,边看边缓存。
2. 调用/返回风格
-
主程序/子程序:单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成模块。过程调用作为交互机制,充当连接件的角色。
-
面向对象:构件是对象,对象是抽象数据类型的实例。连接件是对象间的交互方式,对象通过函数和过程的调用来交互。
-
层次结构:构件组成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。修改某一层,最多影响其相邻的两层(通常只能影响上层)。优点:(1) 支持基于可增加抽象层的设计,将一个复杂问题分解成一个增量步骤序列的实现。(2)不同的层次处于不同的抽象级别,越靠近底层,抽象级别越高(封装通用的方法,与业务无关)。(3) 由于每层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,为软件复用提供支持。缺点:(1)很难找到一个合适且正确的层次抽象方法,系统划分层次不容易。(2) 层次越多,性能越差。
3. 独立构件风格
-
进程通信:构件是独立的进程,连接件是消息传递。消息传递的方式有点对点、异步/同步、远程过程(方法)调用。
-
事件驱动系统(隐式调用):构件触发/广播一个或多个事件,构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。程序语法的高亮、语法错误提示(触发了什么规则)。
4. 虚拟机风格
-
解释器:自定义流程,灵活定义,执行效率低。
-
基于规则的系统:人工智能、DSS、机器人、专家系统。
5. 仓库(共享数据)风格
-
数据库系统:中央共享数据源+多个独立处理的单元。现代编译器的集成开发环境IDE
-
黑板系统:应用在对于解决问题没有确定性算法的软件中,问题复杂、解空间很大,求解过程不确定(信号处理、问题规划、编译器优化、语音识别、知识推理)。(1) 知识源:独立计算的不同单元;(2)黑板:全局数据库;(3)控制:通过黑板状态的变化来控制。
-
超文本系统:互联网领域,网状链接,构件之间任意跳转。
6. 闭环控制风格
适合于嵌入式系统,涉及连续的动作与状态。软件与硬件之间可以表示为一个反馈。汽车巡航定速,空调温度调节。