🏠 首页›第一梯队 · 决胜核心 · 第 9 小时 · 系统架构设计基础

软件架构风格(一)· 经典风格

选择 8~15 分案例 25 分论文高频
📄 教材出处 · 第 9 小时《架构设计》 (书第 87–96 页) ▸ 查看原文摘录 打开教材 PDF ↗
第 87 页 ↗系统架构设计基础知识 9.0 章节考点分析 主要学习软件架构的基本概念、基于架构的软件开发方法、软件架构风格、软件架构 复用以及特定领域软件体系结构等内容。
第 88 页 ↗【导读小贴士】 软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。
第 89 页 ↗系统架构设计基础知识 81 1)组成SA模型(软件架构模型)的基本概念。
第 90 页 ↗9.2 基于架构的软件开发方法 【基础知识点】 1.体系结构的设计方法概述 基于体系结构(架构)的软件设计(Architecture-Based Software Design,ABSD)方法是体系 结构驱动的,即指构成体系结构的商业、质量和功能需求的组合驱动的。
第 91 页 ↗ 9.3 软件架构风格 【基础知识点】 1.软件架构风格概述 软件体系结构设计的核心目标是重复的体系结构模式(软件复用/重用)。
第 92 页 ↗ 图9.3 管道和过滤器风格 3.调用/返回体系结构风格 调用-返回风格在系统中采用了调用与返回机制。

知识点目录(共 3 项)

  1. 数据流风格:批处理 / 管道-过滤器(高频)
  2. 调用/返回风格:主程序-子程序 / 数据抽象与面向对象 / 层次系统 / C2 风格
  3. 独立构件风格:事件驱动(隐式调用)/ 进程通信

知识点详解

一、架构风格总述(必考概念)

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构设计的核心目标是重复的体系结构模式(软件复用)。一个体系结构风格定义一个系统家族,包括:

总分类(Garlan & Shaw,必背):五大类 + 补充——数据流风格(批处理、管道-过滤器)、调用/返回风格(主程序-子程序、面向对象、层次、C/S、B/S)、独立构件风格(进程通信、事件系统/隐式调用)、虚拟机风格(解释器、规则系统)、以数据为中心的仓库风格(数据库、超文本、黑板)+ 闭环过程控制、C2 风格。

二、数据流风格:批处理 vs 管道-过滤器

批处理(以整体为单位) 处理步骤1 处理步骤2 处理步骤3 前一步全部结束,数据完整以整体方式传递后,下一步才开始 管道-过滤器(增量式) 过滤器A 过滤器B 过滤器C 输入→处理→输出输入→处理→输出 输入未完全消费前即可产生输出(增量计算)
图 1-4 批处理 vs 管道-过滤器(重绘自教材图 9.3)
风格构件与连接件特点
批处理构件=独立程序;连接件=媒介每步必须在前一步完全结束后才开始;数据必须完整、以整体方式传递。典型:传统编译器(词法→语法→语义整体传递)、银行结算系统
管道-过滤器构件=过滤器(一组输入/输出);连接件=管道前一个的输出是后一个的输入;过滤器相互独立(不共享数据、不知道上下游标识);增量计算——输入未消费完即可产生输出。典型:Linux 管道命令、流式处理、 编译器流水线

三、调用/返回风格(分而治之)

风格构件/连接件特点与考点
主程序/子程序构件=主程序和子程序;连接件=过程调用单线程控制,把问题划分为若干处理步骤;调用关系具有层次性
数据抽象和面向对象构件=对象(抽象数据类型 ADT 的实例);连接件=对象间消息传递(函数/过程调用)数据表示和相应操作封装在一起;封装、继承、多态
层次型构件=层;连接件=层间协议每一层为上层服务,并作为下层的客户;仅相邻层间有接口(内部层接口只对相邻层可见);每层最多影响上下两层;支持重用与不同实现。典型:OSI 七层、操作系统分层
二层 C/S数据库服务器(后台)+ 客户应用程序(前台)+ 网络"胖客户机";优点:客户应用与服务器构件可运行在不同计算机上;缺点:开发成本高、客户端设计复杂、移植/维护升级困难
三层 C/S表示层 + 功能层 + 数据层"瘦客户机":应用逻辑驻留在应用服务器上,只有表示层在客户机;三层逻辑上独立。考点:三层增加应用服务器,把应用逻辑从客户端剥离
B/S 风格浏览器 + Web 服务器 + 数据库服务器三层结构的实现方式;不足:动态页面支持弱、拓展能力差、安全性难控制、响应速度不足、数据交互性不强

四、独立构件风格(降低耦合)

风格构件/连接件特点与考点
进程通信构件=独立命名的过程;连接件=消息传递消息传递方式:点到点、异步/同步、远程过程调用 RPC
事件系统(隐式调用)构件=过程+事件集合;连接件=事件绑定构件不直接调用过程,而是触发或广播事件;其他构件在事件中注册过程,事件触发时系统自动调用所有注册过程。关键:触发者不知道哪些构件受影响,不能假定处理顺序。典型:编辑器语法高亮、插件机制、GUI 事件
考法:案例题给场景选风格——"系统需要在数据变化时通知多个模块"选事件驱动/隐式调用;"数据逐步流式处理"选管道-过滤器;"各层只与相邻层交互"选层次结构。