三层架构 + MVP 到底怎么结合?如何体现?
一、先把两个概念彻底分开(非常关键)
1. 三层架构(UI-BLL-DAL)
目的:分离界面、业务、数据,解决"代码乱、难维护"
- UI 层:界面、按钮、输入框
- BLL 层:业务逻辑、验证、计算
- DAL 层:数据库增删改查
- Model:实体类(贯穿三层)
2. MVP(View-Presenter-Model)
目的:分离界面逻辑与界面渲染,解决"界面代码臃肿"
- View:界面(只显示,不处理逻辑)
- Presenter:逻辑处理中心
- Model:数据/实体
二、核心结论(一句话)
MVP 是跑在 UI 层内部的架构,用来把 UI 层再拆干净!
三层架构是整体项目架构,MVP 是 UI 层的内部架构!
它们不是竞争关系,是嵌套关系。
三、可视化图画:三层架构 + MVP 如何体现
🎨 终极整合图(最标准、最漂亮)
┌─────────────────────────────────────────────────────┐
【 三 层 架 构 全 局 图 】
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ UI 层 (最上层) │
│ ┌─────────────┐ ┌──────────────────────┐ │
│ │ View │←-------→│ Presenter │ │
│ │ (界面) │ MVP │ (UI逻辑处理中心) │ │
│ └─────────────┘ └──────────┬───────────┘ │
└─────────────────────────────────────┼────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ BLL 层 (业务逻辑) │
│ 业务验证、规则、组合逻辑 │
└─────────────────────────────────────┬────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ DAL 层 (数据访问) │
│ 数据库、EF、SQL 操作 │
└─────────────────────────────────────────────────────┘
↑
│
Model(实体类)贯穿所有层
四、深度说明:MVP 在三层里如何体现?
1. View 只属于 UI 层
- 只做界面显示
- 不写业务逻辑
- 不调用 BLL/DAL
- 不访问数据库
体现:
View 是纯粹的界面,只暴露接口给 Presenter。
2. Presenter 是 UI 层的"大脑",但不属于界面
Presenter 完全独立于窗体,它:
- 接收 View 的事件
- 调用 BLL 层
- 接收 BLL 返回的数据
- 控制 View 显示
体现:
Presenter 是 UI 层与 BLL 层之间的桥梁。
3. BLL、DAL 不变,还是标准三层
- BLL:业务逻辑
- DAL:数据访问
- Model:实体
体现:
三层架构完全不受影响,MVP 只是让 UI 层更干净。
五、最清晰的调用链(必背!)
用户点击查询按钮 → 完整流程
View(界面)
↓ 通知事件
Presenter(逻辑中心)
↓ 调用业务
BLL 层
↓ 调用数据
DAL 层
↓ 查数据库
返回数据 → BLL → Presenter → View 显示
六、为什么要在三层里用 MVP?(核心价值)
不加 MVP:
UI 层按钮点击
↓
直接调用 BLL、DAL
↓
界面.cs 文件几千行,维护灾难
加 MVP:
界面只管显示
逻辑全部抽到 Presenter
界面和逻辑彻底分离
可测试、可复用、可维护