一、软件架构风格概念
Architecture架构,体系结构
软件体系结构风格是 描述某一特定应用领域中 系统组织方式 的惯用模式。架构风格定义一个系统家族,即 一个架构的定义、一个词汇表和一组约束。词汇表包含 一些构建和连接类型,而一组约束 指出系统是如何将这些构件和连接件组合起来的。
架构风格 反映了领域中众多系统所共有的结构和语义特性,并指导 如何将各个模块和子系统有效组织成一个完整的系统。
架构设计核心问题,能否达到架构级别的软件复用。
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
二、软件架构风格(五大类)
- 数据流风格
面向数据流,按照一定顺序从前到后执行程序,代表风格 批处理序列、管道-过滤器。
A.批处理序列:
构件为一系列固定计算单元,构件之间 只通过数据传递交互。每一步程序都必须在其前一步结束才能开始,数据传递下去。
B.管道-过滤器:
过滤器是构件,连接件是管道,前一个构件的输出作为后一个构件的输入。
(批处理序列和管道-过滤器的区别,批处理看视频必需全部下载完,管道可以边看边下载,一步一步处理)
区别是批处理必需前一个处理完才可以执行下一个,管道-过滤则是前面处理到部分,就可以执行下一个。
- 调用/返回风格
构建之间 存在调用关系,一般显式调用,代表的风格 主程序/子程序、面向对象、层次结构。
- 主程序\子程序:
单线程控制,把问题划分为若干个处理步骤。
- 面向对象:
构件是对象,连接件是对象件交互方式,对象通过调用函数和过程。
- 层次结构:
构件组成层次结构,连接件决定层如何交互协议来定义。修改某一层,最多影响相邻的两层(通常只影响上一层)。
层次的优点:
越底层,抽象程度越高。
为软件复用提供强大支持。
缺点:
分层不容易,难道到正确的层次抽象方法。
- 独立构件风格
构件独立,之间不存在显式关系,通过 某个事件触发、异步的方式来执行,代表的风格由 进程通信、事件驱动系统(隐式调用)。
- 进程通信
构件是独立的进程,连接件是传递消息。构件是命名过程,消息传递可以 点对点、异步或同步、以及远程调用等。
- 事件驱动系统(隐式调用)
构件不直接调用过程,而是触发或广播一个或多个事件。(隐式调用比如spring的applicationEvent和kafka消费)
优点:
软件复用、系统维护。
缺点:
构件放弃了对系统计算的控制。(被他人被动调用,所以不能主动控制)
- 虚拟机风格
自定义一套规则供使用者使用,使用者基于这个规则来使用,能够跨平台适配,代表风格由 解释器、基于规则的系统。
典型的虚拟机jvm
- 解释器
包含解释引擎,包含解释代码的存储器,包含解释引擎工作状态数据结构存储,以及记录源代码被解释进度。缺点效率低。
- 基于规则的系统
包含 规则集、规则解释器、规则/数据选择器和工作内存,一般在人工智能和DSS中。
(DSS决策知识,比如大数据进行分析)
- 仓库风格
以 数据为中心,所有的操作系统都是围绕建立数据库中心进行的,代表风格 数据库系统、超文本系统和黑板系统。
- 数据库系统
两大类,一类是中央共享数据源,保存数据状态。另一类多个独立处理单元,处理单元对数据元素进行操作。
- 超文本系统
互联网领域,网状结构。
- 黑板系统
包含 知识源、黑板和控制。
知识源则是包含若干提供计算的单元。黑板是全局数据库。知识源通过响应黑板的变化来变化。
三、其他风格
除了上面的五大风格外,还有其他风格。
- 闭环控制
适用嵌入式系统,当软件操作一个物理系统时,软件与硬件之间可以粗略的表示一个反馈循环,反馈循环接受一定输入,来确定输出,使环境达到新状态。(比如空调从26变为23摄氏度,车子自动巡航)
- C2体系风格
通过连接件绑定在一起的按照一组规则运作的并行架构风格。规则如下
构件连接件都有一个顶部和底部,构件与构件不允许直接连接,构件的底部必需连接连接件的顶部。
一个连接件可以和任意数目的其他构件和连接件链接。
真题:
软件架构风格是描述特定应该用领域中系统组织方式的()。系统风格反映领域中众多系统所共有的结构和(),强调对架构()的重用。
答案:
惯用模式 语义分析 设计
()架构风格可以概括为通过连接件绑定在一起,按照一组规则运作的构件。
答案是C2
不是规则系统,规则系统是会根据参数变化的。