知识点详解
一、架构风格总述(必考概念)
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构设计的核心目标是重复的体系结构模式(软件复用)。一个体系结构风格定义一个系统家族,包括:
- 词汇表:包含构件和连接件类型;
- 约束:定义构件和连接件的组合方式。
总分类(Garlan & Shaw,必背):五大类 + 补充——数据流风格(批处理、管道-过滤器)、调用/返回风格(主程序-子程序、面向对象、层次、C/S、B/S)、独立构件风格(进程通信、事件系统/隐式调用)、虚拟机风格(解释器、规则系统)、以数据为中心的仓库风格(数据库、超文本、黑板)+ 闭环过程控制、C2 风格。
二、数据流风格:批处理 vs 管道-过滤器
| 风格 | 构件与连接件 | 特点 |
| 批处理 | 构件=独立程序;连接件=媒介 | 每步必须在前一步完全结束后才开始;数据必须完整、以整体方式传递。典型:传统编译器(词法→语法→语义整体传递)、银行结算系统 |
| 管道-过滤器 | 构件=过滤器(一组输入/输出);连接件=管道 | 前一个的输出是后一个的输入;过滤器相互独立(不共享数据、不知道上下游标识);增量计算——输入未消费完即可产生输出。典型:Linux 管道命令、流式处理、 编译器流水线 |
三、调用/返回风格(分而治之)
| 风格 | 构件/连接件 | 特点与考点 |
| 主程序/子程序 | 构件=主程序和子程序;连接件=过程调用 | 单线程控制,把问题划分为若干处理步骤;调用关系具有层次性 |
| 数据抽象和面向对象 | 构件=对象(抽象数据类型 ADT 的实例);连接件=对象间消息传递(函数/过程调用) | 数据表示和相应操作封装在一起;封装、继承、多态 |
| 层次型 | 构件=层;连接件=层间协议 | 每一层为上层服务,并作为下层的客户;仅相邻层间有接口(内部层接口只对相邻层可见);每层最多影响上下两层;支持重用与不同实现。典型:OSI 七层、操作系统分层 |
| 二层 C/S | 数据库服务器(后台)+ 客户应用程序(前台)+ 网络 | "胖客户机";优点:客户应用与服务器构件可运行在不同计算机上;缺点:开发成本高、客户端设计复杂、移植/维护升级困难 |
| 三层 C/S | 表示层 + 功能层 + 数据层 | "瘦客户机":应用逻辑驻留在应用服务器上,只有表示层在客户机;三层逻辑上独立。考点:三层增加应用服务器,把应用逻辑从客户端剥离 |
| B/S 风格 | 浏览器 + Web 服务器 + 数据库服务器 | 三层结构的实现方式;不足:动态页面支持弱、拓展能力差、安全性难控制、响应速度不足、数据交互性不强 |
四、独立构件风格(降低耦合)
| 风格 | 构件/连接件 | 特点与考点 |
| 进程通信 | 构件=独立命名的过程;连接件=消息传递 | 消息传递方式:点到点、异步/同步、远程过程调用 RPC |
| 事件系统(隐式调用) | 构件=过程+事件集合;连接件=事件绑定 | 构件不直接调用过程,而是触发或广播事件;其他构件在事件中注册过程,事件触发时系统自动调用所有注册过程。关键:触发者不知道哪些构件受影响,不能假定处理顺序。典型:编辑器语法高亮、插件机制、GUI 事件 |
考法:案例题给场景选风格——"系统需要在数据变化时通知多个模块"选事件驱动/隐式调用;"数据逐步流式处理"选管道-过滤器;"各层只与相邻层交互"选层次结构。