简介
软件架构风格,是描述某一特定应用领域中系统组织方式的惯用模式。
简单来说,系统架构多种多样,我们按照其解决问题的方式、体现出来的风格逻辑分出了以下几个大类,每类根据实际场景又分出了几个小类。总结软件架构风格,我们可以使用这些经过实践证实的解决方案解决新问题,而用某个具体的词语来描述某种软件架构,也便于我们沟通和理解。比如,当我们描述某一种系统架构为"客户端/服务器"风格时,马上就能直观地知道到该系统架构的情况及工作流程。
本文根据《系统架构设计师教程》,总结书中提到的几种软件架构风格,算是《系统架构设计师教程》"软件架构风格"这节的笔记。
数据流风格
数据流体系结构是一种计算机体系结构。没有概念上的程序计数器,指令的可执行性与执行仅基于指令输入参数的可用性来确定。指令执行的顺序不可预测,行为不确定。
(1)批处理
描述:每个处理步骤是一个单独的程序 ,每一步必须在前一步结束后才能开始,并且数据必须是完整的,以整体的方式传递 。它的基本构件是独立的应用程序 ,连接件是某种类型的媒介。连接件定义了相应的数据流图,表达拓扑结构。
图示如下:

(2)管道 - 过滤器
描述:当数据源源不断产生 ,我们可以把系统分解为几个序贯的处理步骤,这些步骤之间通过数据流连接,一个步骤的输出是另一个步骤的输入 。每个处理步骤由一个过滤器(Filter)实现,处理步骤之间的数据传输由管道(Pipe)负责。每个处理步骤(过滤器)都有一组输入输出 ,过滤器从管道中读取输入的数据流,经过内部处理,然后产出输出数据流并写入管道中。管道 - 过滤器风格风格的基本构件是过滤器,连接件是数据流传输管道,将一个过滤器的输出传到另一个过滤器的输入。
图示如下:

对比

调用/返回风格
调用/返回风格,指在系统中采用了调用与返回机制。利用调用 - 返回实际上是一种分而治之的策略,其主要思想是将一个复杂的大系统分解为若干子系统,以便降低复杂度,并且增加可修改性。
(1)主程序/子程序
描述:一般采用单线程控制,将问题划分为若干处理步骤 ,构件即为主程序与子程序**。子程序通常可合成模块 。**过程调用作为交互机制,即充当连接件。调用关系具有层次性,其语义逻辑表现为子程序的正确性取决于它调用的子程序的正确性。
图示如下:

(2)面向对象
描述:建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。构件是对象,或者说是抽象数据类型的实例。
图示如下:

(3)层次
描述:一个层次结构,每一层为上层提供服务,并作为下层的客户。
图示如下:

(4)客户端/服务器
描述:服务器(后台)负责数据管理,客户机(前台)完成与用户的交互。两层C/S是"胖客户机,瘦服务器",三层C/S增加了应用服务器,将客户机的数量分流到某台应用服务器下,称为"瘦客户机"。简单来说,哪部分"胖"哪部分集成的功能就多。
图示如下:

对比

数据为中心风格
(1)仓库
描述:仓库(Repository)是存储和维护数据的中心场所。在该风格中,有两种不同的构件,1)中央数据结构说明当前数据的状态;2)一组对中央数据进行操作的独立构件。连接件为仓库与独立构件之间的交互。
图示如下:

(2)黑板
描述:是一种问题求解模型,是组织推理步骤、控制状态数据和问题求解之领域知识的概念框架。它将问题的解空间组织成一个或多个应用相关的分级结构。分级结构的每一层信息由一个唯一的词汇来描述,它代表了问题的部分解。
图示如下:

对比

虚拟机风格
虚拟机体系风格的基本思想是人为构件一个运行环境,在这个环境之上解析与运行自定义的一些语言,增加架构灵活性。
(1)解释器
描述:通常包括完成解释工作的解释引擎 ,一个包含将被解释的代码存储区 ,一个记录解释引擎当前工作状态的数据结构 ,以及一个记录源代码被解释执行进度的数据结构。典型的例子是专家系统(可理解为知识库问答)。
图示如下:

(2)规则系统
描述:见图,包括规则集、规则解释器、规则/数据选择器及工作内存。
图示如下:

对比

独立构件风格
描述:强调系统中每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度,提高灵活性。
(1)进程通信
描述:构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程,消息传递的方式可以是点到点、异步或同步方式及远程过程调用等。
(2)事件系统
描述:构件不直接调用一个过程,而是触发或广播一个或多个事件。
图示如下:

对比
