一、概念:
风格就是架构的模式,比如C/S、B/S架构,比如现实生活中的中式风格、欧式风格
描述某一特定应用领域中系统组织的方式
软件架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
架构设计的核心问题是能否达到架构级的软件复用
架构风格定义了用于描述系统的术语表和一组指导构架系统的规则
二、风格分类
架构风格 | 考点 | 说明 |
数据流-批处理 | 传统编译器,每个阶段的结果作为下一个阶段的输入,区别在于整体 | 一个接一个,以整体为单位 |
数据流-管道-过滤器 | 一个接一个,前一个输出是后一个输入 | |
调用/返回-主程序/子程序 | 显示调用,主程序直接调用子程序 | |
调用/返回-面向对象 | 对象是构件,通过对象调用封装的方法和属性 | |
调用返回/-层次结构 | 分层,每层最多影响上下两层,有调用关系 | |
独立构件-进程通信 | 进程间独立的消息传递,同步异步 | |
独立构件-事件驱动(隐式调用) | 时间触发推动动作,如程序语言的语法高亮、语法错误提示 | 不直接调用,通过事件驱动 |
虚拟机-解释器 | 自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合。机器人 | 解释自定义的规则、解释引擎、存储区、数据结构(灵活业务规则) |
虚拟机-规则系统 | 规则集、规则解释器、选择器和工作内存,用于DSS和人工智能、专家系统 | |
仓库-数据库 | 现代编译器的集成开发环境IDE,以数据为中心 又称为数据共享风格 | 中央共享数据源,独立处理单元 |
仓库-黑板 | 语音识别、只是推理等问题复杂、解空间大、求解过程不确定的这一类软件系统,黑板,知识源、控制 | |
仓库-超文本 | 网状链接,多用于互联网 | |
闭环-过程控制 | 汽车定速巡航、空调温度调节、设定参数,并不断调整 | 发出控制命令并接受反馈,循环反复达到平衡 |
C2风格 | 构件和连接件、顶部和底部 | 通过连接件绑定在一起按照一组规则运作的并行构件网络 |
1、数据流风格
面向数据流,按一定的顺序从前向后执行程序,代表的风格有批处理序列、管道-过滤器
批处理序列:(有固定顺序)构件为一系列固定顺序的计算单元,构件之间通过数据传递交互,每个处理步骤是一个独立的程序,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体方式传递。
管道-过滤器:(有顺序,有数据流)每个构件有一组输入和输出,构件读取输入的数据流,经过内部处理,产生输出数据流。前一个构件的输出作为后一个构件的输入,前后数据流关联。过滤器就是构件,连接件就是管道。
二者区别:批处理前后构件不一定有关联,作为整体传递,前边整个构件运行完,才能运行后边构件。管道-过滤器,是前一个输出作为后一个输入,前面执行到部分可以开始执行后面,比如:视频播放。
2、调用/返回风格
构件之间存在互相调用的关系,显示的调用。代表风格有主程序/子程序、面向对象、层次结构
主程序/子程序:单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序。过程调用充当连接件。柱/子程序互相调用。
面向对象:构件是对象,对象是通过函数或过程的调用交互的。
层次结构:构件组成是一个层次结构,连接件通过协议来定义,每层为上一层提供服务,使用下一层的服务,只能见到自己邻接的层,修改某一层,最多影响其相邻的两层(通常只能影响上层)。
Bean--Mapper--Service
3、独立架构风格
构件之间是相互独立的,通过某个事件触发、异步的方式执行,代表风格有进程通信、事件驱动系统(隐式调用)
进程通信:构件是进程,连接件是消息传递。构件是独立的占有独立的内存与存储空间。消息传递的方式是点对点、异步或同步方式,以及远程过程(方法)调用。
事件驱动系统(隐式调用):构件的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。
4、虚拟机风格
自定义了一套规则供使用者使用,使用者基于这个规则开发构件,能够跨平台适配,代表风格有解释器、基于规则的系统,JVM
解释器:具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,缺点是执行效率低。
基于规则的系统:包括规则集、规则解释器、规则/数据选择器和工作内存,一般用在人工智能领域和DSS(决策支持)中。
5、仓库风格
以数据为中心,所有的操作都是围绕建立的数据中心进行,代表的风格有数据库系统、超文本系统、黑板系统。
数据库系统:常规数据库。
黑板系统:当成一个黑板,在黑板上展示数据信息
超文本系统:以网状链接方式相互连接。
6、闭环控制
软件和硬件之间表示为一个反馈循环,比如空调,会根据房间温度的反馈去自动调节温度
7、C2风格
按照规则通过连接件绑定在一起。
构件和连接件都有一个顶部和底部,构件的顶部连接到连接件的底部,构件的底部连接到连接件的顶部,构件与构件之间不允许直接连接