文章目录
软件架构风格描述
软件架构风格是描述某一特定领域内系统组织方式的惯用模式,它包括一个词汇表和一组约束.词汇表包扩一些构件和连接件的类型.而约束描述了系统是如何将这些构件和连接件组合到一起的.软件架构风格反映了特定领域内的系统共有的结构和语义,并指导系统如果将子系统和构件有效的连接在一起.
以下红色只为个人备忘,不代表知识点重要程度
数据流风格
批处理风格
由一组固定顺序的构件连接在一起组成
每个构件的开始必须在上一个构件的结束后开始。构件间交互的数据必须时完整的。
管道过滤器风格
构件有一个输入流、一个输出流。构件根据输入流进行内部处理,产生输出流,构件即过滤器。构件的连接件即为管道,负责把一个过滤器的输出传给另一个过滤器的输入
优点:
构件间具有良好的隐蔽性和低耦合性
;
支持软件重用
只需要确定构件间交互的数据格式,即可将任何两个构件连接在一起;
可扩展性强,添加新的构件,可修改性强,更换构件不会对其他构件和整体架构造成影响;
支持并行处理,每个过滤器可作为单独任务完成
;
缺点:
难以定义过滤器间数据通信的统一标准
;
调用返回风格
主子程序风格
单线程控制,把问题分成若干处理步骤
主程序根据自身需要,选择子程序进行调用。
面向对象(显式调用风格)
将构件间交互的数据的表示形式
及其操作封装成对象,即构件。构件间的过程调用或函数
即连接件。
优点:
对象具有的封装性,修改一个对象不会对其他对象照成影响;
一个构件如果想要调用另一个构件,只需要知道另一个构件的标识即可。
缺点:
一但一个构件的标识发生变化,那么所有调用这个对象的构件都要发生变化;
如果A调用了C,B也调用了C,那么A对C的影响对B是不可预计的;
层次结构
风格
每一层即为构件,层与层间的通讯即为连接件。每一层负责调用下一层的功能,并向上一层提供功能。每一层只可见其相邻的两个层次;
优点:
把一个复杂的问题分成增量步骤去解决,降低问题复杂度,逐个击破
具有良好的低耦合特性,每一层的变动仅对其相邻的层次照成影响;扩展性,添加新的层次简单;
缺点:过多的层次调用影响响应效率
独立构件风格
调用返回风格(隐式调用)
构件不直接调用构件的过程
,而是触发
一个事件
或触发多个事件.系统中其他构件的过程在一个或多个构件中注册,当一个事件触发时,所有在该事件中进行注册的构件的过程都将被调用;
优点:
低耦合性,每个构件不直接关联到一起,二十通过注册的方式关联;
可复用性强,一个构件的过程可以被多个事件调用,只需要在事件中进行注册;
可扩展性强,新增一个构件时只需要把它注册在相关的事件中,替换一个构件时不会对其他构件或整体系统照成影响;
缺点:
一个事件触发后,其无法知晓其中注册的构件的过程是否成功执行;
即使知道一个事件中注册了哪些构件的过程,但其调用过程的顺序不可保证
虚拟机风格
基于规则风格
用于专家系统
解释器风格
完成解释工作的解释引擎,待解释代码的储存区,记录当前解释器解释状态的数据结构,记录源代码被解释进度的数据结构
来屏蔽来自操作系统,数据
等外部环境的差异,建立解释规则
优点:
缺点:
效率低
仓库风格
数据库风格
说明当前系统数据状态的中央数据结构,在中央数据结构上执行的构件
输入流中的某个事件触发进程的选择
黑板系统
说明系统数据状态的中央数据结构,在中央数据结构上运行的构件
中央数据结构的当前状态触发进程选择
浏览器风格
两层CS架构
胖客户端. 表示层
- 数据层
缺点:
开发成本高,要开发客户端,客户端设计复杂
;
软件移植困难
;
客户端冗余业务,不利于维护,修改扩展时很麻烦;
优点:
响应效率会比BC略高,因为客户端负责了部分的运算;
网络负载小,一般都在内部局域网;
安全性高,不涉及互联网传输;
三层CS架构
瘦客户端. 表示层
- 功能层
- 数据层
对两层CS架构中,客户端和服务器端的均存在的功能层进行了提取
三层BS架构
0客户端. 浏览器 - web服务器
使用通用的浏览器和www访问Web服务器的方式进行交互.
优点:可扩展性强,浏览器不冗余业务.
缺点:
安全性不如CS(通过信息安全策略弥补);
对动态页面的支持不足(通过jsp css等弥补);
以页面为提交单位(通过ajax弥补)
混合架构
内外有别:
内部管理体系健全,客户端可维护且客户端数量校验,可采用CS;
外部分布区域广,免去客户端维护,可扩展性号;
查改有别:
其他风格
C2风格
每个构件都一个顶部和底部.每个构件可以和任何其他构件连接. 每个构件的顶部只能连接在另一个构件的底部.