所属篇章:下篇·案例分析
考查形式:案例分析题 + 论文题
难度等级:★★★★
一、本章知识图谱
层次式架构
├── 13.1 层次式架构概述
├── 13.2 经典的三层架构(B/S 与 C/S)
├── 13.3 四层/多层架构
├── 13.4 MVC 架构与变体
├── 13.5 分层架构的设计原则
└── 13.6 典型案例分析
二、核心考点详解
考点 1:C/S 与 B/S 架构对比
考点 2:经典的三层架构
┌─────────────────┐
│ 表示层(UI) │ ← 用户界面、交互
├─────────────────┤
│ 业务逻辑层(BLL)│ ← 核心业务规则
├─────────────────┤
│ 数据访问层(DAL)│ ← 数据库操作
└─────────────────┘
各层职责:
考点 3:四层/多层架构
在三层基础上增加层次:
┌─────────────────┐
│ Web 层 │ ← HTTP 请求处理、路由
├─────────────────┤
│ 应用服务层 │ ← 用例编排、流程协调
├─────────────────┤
│ 领域层 │ ← 核心业务逻辑、领域模型
├─────────────────┤
│ 基础设施层 │ ← 数据库、消息、缓存
└─────────────────┘
DDD 四层架构(领域驱动设计):
高频考点:领域层是 DDD 的核心,包含领域模型和业务规则。应用层只做编排,不包含业务逻辑。
考点 4:MVC 架构
MVC(Model-View-Controller) 是表现层的设计模式:
| Model(模型) | ||
| View(视图) | ||
| Controller(控制器) |
MVC 变体:
| MVP | ||
| MVVM |
考点 5:分层架构设计原则
- 上层依赖下层
下层不依赖上层(依赖方向单一) - 同层之间不直接调用
(通过上层协调) - 每层只暴露接口给上层
(信息隐藏) - 层次边界清晰
(避免职责混乱)
松散分层:允许跨层调用(如表示层直接调用数据访问层),提高性能但降低灵活性。
三、案例分析题解析
【案例题】某电商平台从单体架构迁移到分层架构
背景:某电商平台原有单体架构,代码耦合严重,难以维护和扩展。需要重新设计架构。
问题:请为该平台设计合理的分层架构,并说明各层的职责和关键技术选型。
参考答案:
采用四层架构 + DDD 思想:
关键设计决策:
- 依赖倒置
领域层定义接口,基础设施层实现(Repository 模式) - 领域模型
以聚合根组织业务对象(订单聚合、商品聚合) - 防腐层
封装外部服务调用(支付、物流),隔离变化
考点 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 | |
| MVP | |
| MVVM | |
| UIP |
表现层动态生成设计:
基于元数据的 UI 自动生成 XML/XAML 定义界面布局 统一 Web Form 与 Windows Form 的外观
考点 9:中间层架构设计
业务逻辑层组件设计:
业务组件封装业务规则 无状态设计便于扩展 接口与实现分离
业务逻辑层工作流设计:
顺序工作流:按步骤依次执行 状态机工作流:基于事件和状态转换 规则工作流:基于业务规则动态决策
业务逻辑层实体设计:
实体 = 业务对象的抽象(订单、商品、用户) 充血模型:实体包含业务逻辑 贫血模型:实体只有数据,逻辑在服务中
考点 10:数据访问层设计
5 种数据访问模式:
| 在线访问 | ||
| DAO 模式 | ||
| DTO 模式 | ||
| 离线数据模式 | ||
| ORM 模式 |
工厂模式在数据访问层的应用:
抽象工厂创建不同的 DAO 实现 支持运行时切换数据库(MySQL/Oracle) 降低数据访问层与具体数据库的耦合
事务处理设计:
本地事务:单数据库事务 分布式事务:2PC、TCC、Saga 事务传播行为:REQUIRED、REQUIRES_NEW、SUPPORTS
连接对象管理:
连接池技术:复用数据库连接 常见连接池:HikariCP、Druid、DBCP 配置参数:最大连接数、最小空闲、超时时间
考点 11:物联网层次架构设计
物联网三层架构在层次式设计中的体现:
考点 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
优点:
低耦合:各层职责明确,可独立修改 可复用:同一个 Model 可以被多个 View 复用 可测试:Model 可以单独进行单元测试
缺点:
复杂度高:小项目开发成本增加 职责边界模糊:实际开发中容易出现职责交叉
考点 12:MVP 与 MVVM 对比
| MVC | |||
| MVP | |||
| MVVM | |||
| UIP |
MVP vs MVC 对比:
考点 13:领域驱动设计(DDD)四层架构
| 用户界面层 | ||
| 应用层 | ||
| 领域层 | ||
| 基础设施层 |
DDD 核心概念:
- 实体(Entity)
有唯一标识,生命周期内可变 - 值对象(Value Object)
无唯一标识,不可变 - 聚合(Aggregate)
一组相关对象的集合,有聚合根 - 领域服务(Domain Service)
不属于任何实体的业务操作 - 限界上下文(Bounded Context)
领域模型的边界,微服务拆分依据
考点 14:分层架构的依赖原则
依赖方向原则:
上层依赖下层,下层不依赖上层 同层之间不相互依赖 跨层调用通过接口抽象
常见违反原则的情况:
四、补充考点
考点 15:Clean Architecture(整洁架构)
核心原则:依赖指向内部,外层依赖内层,内层不知道外层存在
考点 16:六边形架构(端口与适配器)
优势:核心业务逻辑与外部技术完全解耦,方便测试和替换技术栈
考点 17:微前端架构
微前端 vs 单体前端:
考点 18: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 错)。
五、高频易错点归纳
六、本章小结
- C/S vs B/S
各自优缺点和适用场景 - 三层架构
表示层/业务层/数据层的职责划分 - DDD 四层
用户界面层/应用层/领域层/基础设施层 - MVC/MVP/MVVM
表现层设计模式对比 - 分层原则
依赖方向、信息隐藏、边界清晰 - DDD 核心
实体/值对象/聚合/限界上下文 - Clean Architecture
依赖指向内部,业务规则不依赖框架 - 六边形架构
端口与适配器,驱动侧/被动侧 - 微前端
独立部署、多团队并行、模块联邦 - CQRS + Event Sourcing
读写分离、事件溯源、最终一致性