软考系统架构师 · 全册考点精讲与真题实战 第 13 章 层次式架构

四季读书网 2 0
软考系统架构师 · 全册考点精讲与真题实战 第 13 章 层次式架构

所属篇章:下篇·案例分析
考查形式:案例分析题 + 论文题
难度等级:★★★★


一、本章知识图谱

层次式架构
├── 13.1 层次式架构概述
├── 13.2 经典的三层架构(B/S 与 C/S)
├── 13.3 四层/多层架构
├── 13.4 MVC 架构与变体
├── 13.5 分层架构的设计原则
└── 13.6 典型案例分析

二、核心考点详解

考点 1:C/S 与 B/S 架构对比

对比维度
C/S(客户端/服务器)
B/S(浏览器/服务器)
客户端
专用客户端
标准浏览器
部署
需要安装/更新客户端
无需安装,浏览器访问
性能
可充分利用客户端资源
依赖网络和服务器
安全性
可控制客户端环境
面临更多 Web 安全威胁
维护
客户端需同步更新
服务器端统一更新
跨平台
需针对不同平台开发
天然跨平台

考点 2:经典的三层架构

┌─────────────────┐
│   表示层(UI)    │  ← 用户界面、交互
├─────────────────┤
│   业务逻辑层(BLL)│  ← 核心业务规则
├─────────────────┤
│   数据访问层(DAL)│  ← 数据库操作
└─────────────────┘

各层职责

层次
职责
典型技术
表示层
界面展示、输入验证、用户交互
HTML/CSS/JS、Vue/React
业务逻辑层
业务规则、事务管理、安全校验
Spring Service、.NET Service
数据访问层
数据库 CRUD、ORM 映射
MyBatis、Hibernate、EF

考点 3:四层/多层架构

在三层基础上增加层次:

┌─────────────────┐
│   Web 层         │  ← HTTP 请求处理、路由
├─────────────────┤
│   应用服务层      │  ← 用例编排、流程协调
├─────────────────┤
│   领域层          │  ← 核心业务逻辑、领域模型
├─────────────────┤
│   基础设施层      │  ← 数据库、消息、缓存
└─────────────────┘

DDD 四层架构(领域驱动设计):

层次
职责
用户界面层
向用户显示信息、处理用户输入
应用层
薄薄的协调层,不包含业务规则
领域层
核心业务逻辑,实体、值对象、聚合
基础设施层
技术实现,数据库、文件、消息

高频考点:领域层是 DDD 的核心,包含领域模型和业务规则。应用层只做编排,不包含业务逻辑。

考点 4:MVC 架构

MVC(Model-View-Controller) 是表现层的设计模式:

组件
职责
关系
Model(模型)
数据和业务逻辑
被 View 展示,被 Controller 操作
View(视图)
界面展示
观察 Model 变化
Controller(控制器)
接收输入,调用 Model
选择 View

MVC 变体

变体
特点
典型应用
MVP
Presenter 替代 Controller,View 更被动
Android 开发
MVVM
ViewModel 绑定 View,数据驱动
WPF、Vue.js

考点 5:分层架构设计原则

  1. 上层依赖下层
    下层不依赖上层(依赖方向单一)
  2. 同层之间不直接调用
    (通过上层协调)
  3. 每层只暴露接口给上层
    (信息隐藏)
  4. 层次边界清晰
    (避免职责混乱)

松散分层:允许跨层调用(如表示层直接调用数据访问层),提高性能但降低灵活性。


三、案例分析题解析

【案例题】某电商平台从单体架构迁移到分层架构

背景:某电商平台原有单体架构,代码耦合严重,难以维护和扩展。需要重新设计架构。

问题:请为该平台设计合理的分层架构,并说明各层的职责和关键技术选型。

参考答案

采用四层架构 + DDD 思想

层次
职责
技术选型
Web 层
接收 HTTP 请求、参数校验、返回响应
Spring MVC / Spring WebFlux
应用服务层
编排用例、事务管理、权限控制
Spring Service + AOP
领域层
核心业务规则(订单、商品、用户聚合)
领域模型 + 仓储接口
基础设施层
数据库、缓存、消息队列、外部服务
MySQL + Redis + RabbitMQ

关键设计决策:

  1. 依赖倒置
    领域层定义接口,基础设施层实现(Repository 模式)
  2. 领域模型
    以聚合根组织业务对象(订单聚合、商品聚合)
  3. 防腐层
    封装外部服务调用(支付、物流),隔离变化

考点 6:六边形架构(端口-适配器)

六边形架构(Hexagonal Architecture) 也称端口-适配器架构,将系统分为内部和外部:

  • 端口(Port)
    系统对外提供的接口(如 API)
  • 适配器(Adapter)
    连接外部系统的实现(如数据库、消息队列)

优势:核心业务逻辑完全独立于外部依赖,便于测试和替换。

考点 7:清洁架构(Clean Architecture)

清洁架构由 Robert C. Martin 提出,核心思想是依赖方向只能从外向内:

外部层 → 接口层 → 用例层 → 实体层
  • 实体层
    核心业务规则
  • 用例层
    应用业务规则
  • 接口层
    控制器、网关、 presenter
  • 外部层
    框架、驱动、数据库

高频考点:清洁架构和六边形架构、DDD 四层架构的核心思想一致——核心业务逻辑位于最内层,不依赖外部实现。


三、补充历年真题解析

真题 2021 年·综合知识

题目:在 MVC 架构中,当 Model 数据发生变化时,通知 View 更新数据的机制是(  )。

A. Controller 主动通知 View
B. View 定时轮询 Model
C. 观察者模式,View 观察 Model 的变化
D. Model 直接修改 View

答案:C

解析:经典 MVC 中,View 通过观察者模式观察 Model 的变化,当 Model 数据改变时自动通知所有注册的 View 进行更新。

真题 2023 年·综合知识

题目:以下关于 DDD 四层架构的叙述中,正确的是(  )。

A. 应用层包含核心业务逻辑
B. 领域层定义接口,基础设施层提供实现
C. 用户界面层可以直接访问数据库
D. 基础设施层包含业务规则

答案:B

解析:DDD 四层架构中,领域层定义仓储接口,基础设施层提供具体实现(依赖倒置原则)。应用层只负责编排,不包含业务逻辑(A 错)。用户界面层不能直接访问数据库(C 错)。基础设施层不包含业务规则(D 错)。

考点 8:表现层框架设计

表现层设计模式

模式
说明
MVC
Model-View-Controller 分离
MVP
Model-View-Presenter,View 更被动
MVVM
ViewModel 数据绑定,双向通知
UIP
用户界面过程,处理复杂页面流

表现层动态生成设计

  • 基于元数据的 UI 自动生成
  • XML/XAML 定义界面布局
  • 统一 Web Form 与 Windows Form 的外观

考点 9:中间层架构设计

业务逻辑层组件设计

  • 业务组件封装业务规则
  • 无状态设计便于扩展
  • 接口与实现分离

业务逻辑层工作流设计

  • 顺序工作流:按步骤依次执行
  • 状态机工作流:基于事件和状态转换
  • 规则工作流:基于业务规则动态决策

业务逻辑层实体设计

  • 实体 = 业务对象的抽象(订单、商品、用户)
  • 充血模型:实体包含业务逻辑
  • 贫血模型:实体只有数据,逻辑在服务中

考点 10:数据访问层设计

5 种数据访问模式

模式
说明
特点
在线访问
直接连接数据库
简单但不灵活
DAO 模式
Data Access Object
接口与实现分离
DTO 模式
Data Transfer Object
减少远程调用次数
离线数据模式
离线缓存数据
支持断网操作
ORM 模式
对象关系映射
简化数据库操作

工厂模式在数据访问层的应用

  • 抽象工厂创建不同的 DAO 实现
  • 支持运行时切换数据库(MySQL/Oracle)
  • 降低数据访问层与具体数据库的耦合

事务处理设计

  • 本地事务:单数据库事务
  • 分布式事务:2PC、TCC、Saga
  • 事务传播行为:REQUIRED、REQUIRES_NEW、SUPPORTS

连接对象管理

  • 连接池技术:复用数据库连接
  • 常见连接池:HikariCP、Druid、DBCP
  • 配置参数:最大连接数、最小空闲、超时时间

考点 11:物联网层次架构设计

物联网三层架构在层次式设计中的体现

层次
技术
感知层
传感器+嵌入式系统
网络层
MQTT/CoAP/5G
应用层
云平台+数据分析

考点 12:电子商务网站 PetShop 案例分析

PetShop 是经典的 .NET 分层架构示例:

  • 表现层:ASP.NET Web Form
  • 业务逻辑层:BLL 组件
  • 数据访问层:DAL + 工厂模式
  • 模型层:实体类

设计亮点

  • 接口隔离:IDAL 接口抽象
  • 工厂模式:DALFactory 动态创建 DAO
  • 缓存策略:Memcached 缓存热点数据

四、补充历年真题解析

真题 2022 年·综合知识

题目:在层次式架构中,DTO(Data Transfer Object)的主要作用是(  )。

A. 封装业务逻辑  B. 减少远程调用次数
C. 管理数据库连接  D. 处理用户界面

答案:B

解析:DTO 将多个相关数据封装为一个对象传输,减少远程调用次数。业务逻辑在 BLL 中(A 错),连接管理在 DAL 中(C 错),UI 在表现层(D 错)。

真题 2021 年·综合知识

题目:在三层架构中,业务逻辑层的主要职责是(  )。

A. 数据展示  B. 业务规则处理和事务管理
C. 数据存储  D. 网络通信

答案:B

解析:业务逻辑层(BLL)的主要职责是处理业务规则、事务管理和数据校验。数据展示是表示层的职责(A 错),数据存储是数据访问层(C 错),网络通信是基础设施层(D 错)。

真题 2023 年·案例分析

题目:某系统采用 MVC 架构,请分析 Model、View、Controller 各自的职责,并说明 MVC 的优缺点。

参考答案

职责划分

  • Model
    封装数据和业务逻辑,提供数据访问接口
  • View
    负责数据展示和用户界面
  • Controller
    接收用户请求,调用 Model,选择 View

优点

  1. 低耦合:各层职责明确,可独立修改
  2. 可复用:同一个 Model 可以被多个 View 复用
  3. 可测试:Model 可以单独进行单元测试

缺点

  1. 复杂度高:小项目开发成本增加
  2. 职责边界模糊:实际开发中容易出现职责交叉

考点 12:MVP 与 MVVM 对比

模式
全称
核心思想
适用
MVC
Model-View-Controller
Controller 协调 Model 和 View
Web 应用
MVP
Model-View-Presenter
Presenter 完全控制 View
单元测试要求高
MVVM
Model-View-ViewModel
ViewModel 通过数据绑定连接 View
前端框架(WPF、Vue)
UIP
User Interface Process
管理页面流程
复杂导航流程

MVP vs MVC 对比

维度
MVC
MVP
View 和 Model
可直接通信
完全隔离
测试性
中等
高(View 可模拟)
复杂度
较低
较高
View 依赖
依赖 Controller
依赖 Presenter

考点 13:领域驱动设计(DDD)四层架构

层次
职责
关注点
用户界面层
用户交互、展示
UI 设计
应用层
协调业务流程、事务管理
用例编排
领域层
核心业务逻辑、领域模型
业务规则(核心)
基础设施层
技术实现、持久化、通信
技术细节

DDD 核心概念

  • 实体(Entity)
    有唯一标识,生命周期内可变
  • 值对象(Value Object)
    无唯一标识,不可变
  • 聚合(Aggregate)
    一组相关对象的集合,有聚合根
  • 领域服务(Domain Service)
    不属于任何实体的业务操作
  • 限界上下文(Bounded Context)
    领域模型的边界,微服务拆分依据

考点 14:分层架构的依赖原则

依赖方向原则

  • 上层依赖下层,下层不依赖上层
  • 同层之间不相互依赖
  • 跨层调用通过接口抽象

常见违反原则的情况

违反
问题
解决方案
下层调用上层
循环依赖
依赖倒置、事件机制
同层互调
耦合度高
抽取公共服务层
跨层调用
层间耦合
引入中间层
表现层直接访问数据库
跳过业务层
通过 BLL 访问

四、补充考点

考点 15:Clean Architecture(整洁架构)

层次
说明
依赖方向
Entities(实体)
企业级业务规则
不依赖任何层
Use Cases(用例)
应用级业务规则
依赖实体层
Interface Adapters(接口适配)
转换数据格式
依赖用例层
Frameworks & Drivers(框架)
外部工具、UI、DB
依赖适配层

核心原则:依赖指向内部,外层依赖内层,内层不知道外层存在

考点 16:六边形架构(端口与适配器)

概念
说明
端口(Port)
应用核心逻辑的接口定义
适配器(Adapter)
端口的外部实现
驱动侧(Driving)
外部调用应用(HTTP、消息队列)
被动侧(Driven)
应用调用外部(数据库、第三方 API)

优势:核心业务逻辑与外部技术完全解耦,方便测试和替换技术栈

考点 17:微前端架构

模式
说明
微前端
将前端应用拆分为多个独立部署的小型应用
模块联邦(Module Federation)
Webpack 5 运行时模块共享
qiankun
基于 single-spa 的微前端框架
iframe
最简单的隔离方式

微前端 vs 单体前端

维度
单体前端
微前端
部署
整体部署
独立部署
技术栈
统一
可混合
团队
单一团队
多团队并行
复杂度

考点 18:CQRS 与事件溯源在分层中的应用

概念
说明
CQRS
命令(写)和查询(读)分离,可用不同模型
事件溯源
状态变化以事件序列存储,可回放重建
最终一致性
读写模型异步同步,允许短暂不一致
物化视图
读模型预计算,提高查询性能

真题 2023 年·综合知识

题目:以下关于 Clean Architecture(整洁架构)的叙述中,正确的是(  )。

A. 外层(框架层)是核心,内层依赖外层
B. 业务规则(Entities)不依赖任何外部框架和工具
C. 数据库技术选型应在设计业务规则之前确定
D. 整洁架构只适用于微服务架构

答案:B

解析:整洁架构的核心原则是依赖指向内部,实体层(业务规则)是最内层,不依赖任何外部框架、数据库、UI。外层依赖内层(A 错),技术细节应在外层(C 错),适用于多种架构风格(D 错)。

真题 2022 年·综合知识

题目:在六边形架构中,驱动侧适配器的作用是(  )。

A. 连接应用与数据库
B. 接收外部请求并调用应用核心逻辑
C. 实现业务规则
D. 定义端口接口

答案:B

解析:驱动侧(Driving)适配器负责接收外部输入(HTTP 请求、消息队列消息等)并调用应用核心逻辑。连接数据库是被动侧(Driven)适配器(A 错),业务规则在核心层(C 错),端口在核心层定义(D 错)。

真题 2021 年·综合知识

题目:关于 CQRS 模式,以下叙述正确的是(  )。

A. CQRS 要求读写使用同一个数据模型
B. CQRS 的读写模型可以存储在不同的数据库中
C. CQRS 只适用于单机应用
D. CQRS 保证强一致性

答案:B

解析:CQRS 将读写分离,可以使用不同的数据模型和不同的数据库(如写入关系型、读取 NoSQL)。读写用不同模型(A 错),适合分布式(C 错),通常是最终一致性(D 错)。


五、高频易错点归纳

易错点
正确理解
MVC 中 View 不能直接访问 Model
MVC 中 View 可以直接从 Model 读取数据(MVP 中不可以)
三层 = 三个项目
三层是逻辑划分,可以是同一项目中的不同命名空间
DDD 就是四层架构
DDD 核心是领域建模,四层是实现方式之一
DTO = Entity
DTO 是传输对象,Entity 是领域模型,职责不同
分层越细越好
过度分层增加复杂度,应根据项目规模决定

六、本章小结

  1. C/S vs B/S
    各自优缺点和适用场景
  2. 三层架构
    表示层/业务层/数据层的职责划分
  3. DDD 四层
    用户界面层/应用层/领域层/基础设施层
  4. MVC/MVP/MVVM
    表现层设计模式对比
  5. 分层原则
    依赖方向、信息隐藏、边界清晰
  6. DDD 核心
    实体/值对象/聚合/限界上下文
  7. Clean Architecture
    依赖指向内部,业务规则不依赖框架
  8. 六边形架构
    端口与适配器,驱动侧/被动侧
  9. 微前端
    独立部署、多团队并行、模块联邦
  10. CQRS + Event Sourcing
    读写分离、事件溯源、最终一致性

抱歉,评论功能暂时关闭!