三层架构 + MVP 到底怎么结合?如何体现?

三层架构 + 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
界面和逻辑彻底分离
可测试、可复用、可维护

七、一句话总结(博客最吸睛)

三层架构是项目的整体骨架,MVP 是 UI 层的内部灵魂。

Presenter 就是 UI 层与 BLL 层之间的"干净连接器"。


相关推荐
杉氧5 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
杉氧6 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
Lion096 小时前
ReAct 循环:Agent 的思考引擎 — Think → Act → Observe
架构
得物技术8 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
自珍JAVA10 小时前
Superpowers AI编码秩序
架构
古茗前端团队10 小时前
急招!前端|测试|后端|产品(名额多,速来)
前端·后端·架构
木雷坞12 小时前
我再也不敢随手 `docker compose down -v` 了
架构
没落英雄12 小时前
从零开始搭建一个 AI Agent —— LangChain + TypeScript 实战手记
前端·人工智能·架构
doiito13 小时前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
她的男孩1 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构