通俗理解软件开发中前后端开发的架构模式(后端逻辑分层的“三层架构”和前端逻辑分层的“MVC 模式”)

一、 三层架构(Layered Architecture):后端逻辑的纵向切分

这是我们写 Java 后端代码时最常用 的逻辑分层,它侧重于后端内部的职责划分

当你接到一个任务,你需要把代码"垂直"地切成三层:

  1. 表现层 / 控制层 (Controller)
    • 职责:负责接客。接收用户的 HTTP 请求,解析参数,最终把处理好的结果返回给用户。
  2. 业务逻辑层 (Service)
    • 职责 :负责干活。这里是项目的核心,比如判断逻辑、计算逻辑、事务控制(比如转账时,A减钱和B加钱必须同时成功)。
  3. 数据访问层 (DAO/Mapper)
    • 职责:负责沟通。专门处理与数据库(MySQL等)的交接工作,执行 SQL 语句。

为什么要分这三层? 主要是为了业务逻辑的内聚。如果某一天你要把网页换成手机 App,由于业务逻辑都封装在 Service 层里,你只需要新写一个 Controller,Service 层代码完全不用动。


二、 MVC 模式:网页开发的横向切分

MVC 则更侧重于 Web 整体的交互结构,它描述的是"用户看到什么"到"后台处理什么"的过程:

  1. Model (模型) :即数据。对应我们的 Domain(实体类)和 DAO 层。它负责维护数据的状态和规则。
  2. View (视图) :即界面。你在浏览器里看到的 HTML、JSP、或者前端页面(Vue/React)。它负责展示数据。
  3. Controller (控制器) :即中转站。它连接 Model 和 View。当用户点击页面(View)时,Controller 接收请求,去操作数据(Model),然后把数据更新到页面上。

三、 它们的联系与区别

虽然很多时候我们混着说,但它们的区别很关键:

特性 三层架构 MVC 模式
侧重点 关注代码的组织和耦合度 关注交互逻辑的实现
层级关系 纵向:Controller -> Service -> DAO 横向:View -> Controller -> Model
核心目的 逻辑分离,方便代码复用和维护 组件分离,实现数据展示与处理逻辑解耦
在现代开发中的融合:

现在的 Java 开发(特别是前后端分离项目)通常这样结合:

  • 后端 :严格遵循 Controller -> Service -> DAO 的三层架构,负责处理纯逻辑;
  • 前端:自行实现 MVC 或 MVVM 架构(比如 Vue),处理页面的展示逻辑。

如何形象理解?

你可以把一个餐厅订单系统看作这样:

  • View (MVC):菜单和点餐界面(展示给用户)。
  • Controller (MVC/三层):服务员。他接收你的点餐要求(接收请求),但他不负责炒菜。
  • Service (三层):厨师。他掌握炒菜的流程(业务逻辑),比如先热锅、后下料。他也不会直接去地窖取菜,而是吩咐配菜员。
  • DAO (三层):配菜员(Mapper)。他只负责从地窖(数据库)里把食材(数据记录)取出来交给厨师。

为什么要这么折腾?

因为如果厨师既要热锅,又要去地窖挖土豆,还要去前台招呼客人,餐厅一旦客流量大,服务员一旦生病,整个餐厅就瘫痪了。分层之后,餐厅的各个模块可以独立运行、方便替换,这才是软件架构最核心的魅力所在。


二者容易产生混淆,是因为 MVC三层架构 是从不同的维度对程序进行拆分的。

它们是两套不同的"切分蛋糕"的方法,经常被组合在一起使用。

我们来理清一下它们的层级关系:

1. MVC 是"横向"的架构(关注用户交互)

MVC 是为了把用户看到的数据存储的切分开:

  • View (视图层): 也就是前端页面,用户看到的东西。
  • Controller (控制层): 它是"交通警察"。它负责接收 View 的请求,调用 Model 处理数据,再决定把什么 View 渲染给用户。
  • Model (模型层): 这里比较宽泛,它代表了数据结构与业务逻辑

2. 三层架构 是"纵向"的细化(关注后端功能)

为了让 MVC 中的 Model 部分不那么臃肿,后端工程师把 Model 拆成了"三层":

  • Controller (这一层属于 MVC 的 C): 接口接收层。
  • Service (业务逻辑层): 专门处理复杂的业务逻辑(这就是三层架构的第二层)。
  • DAO/Mapper (数据访问层): 专门负责和数据库读写交互(这就是三层架构的第三层)。

总结:它们的关系图

你可以把 MVC 看作一个大骨架,把三层架构看作骨架内部的肌肉组织:

MVC 分层 对应三层架构中的角色 主要职责
View (独立存在) 负责展示数据 (HTML, React/Vue 等)
Controller Controller 负责请求调度,不写复杂的业务逻辑
Model Service + DAO Service: 处理计算和判断;DAO: 负责和数据库交互

关键点总结:

  1. MVC 不是三层 ,它是三部分的组合;"三层架构"指的是 Controller/Service/DAO 这三块的层级关系
  2. 在现代 Web 开发中(比如 Spring Boot 项目),我们通常会把 MVC 中的 Model 用"三层架构"的方式拆解开
  3. 所以,Controller 既是 MVC 的 C,也是三层架构的顶层 ;而 Service 和 DAO 则是 MVC 中 M 的进一步精细化拆分,并不是每一层都叫"三层"。

一句话总结:

MVC 告诉你"要把显示、逻辑、数据分开",而三层架构告诉你"后台的逻辑和数据具体该怎么分工"。

这两个概念的"重叠部分"需要理清楚。

相关推荐
-Thinker1 小时前
【无标题】
java·开发语言·算法·图搜索
王五周八1 小时前
Tesseract OCR的Java使用(附安装包,非常详细)
java·开发语言·ocr
旧书包的青春1 小时前
2026年6月11日
java
实在智能RPA1 小时前
航空Agent落地效果评估指标:2026年企业级智能自动化价值度量体系拆解
java·网络·人工智能·ai·自动化
程序员二叉2 小时前
【JUC】AQS底层深度拆解|独占/共享模式|队列原理全详解
java·开发语言·面试·juc
地铁潜行者2 小时前
消息堆积后,为什么一扩容消费者,MySQL 先被打崩了?
java·后端
地铁潜行者2 小时前
订单状态更新成功了,分账消息却没发出去:聊聊本地消息表的一致性坑
java·后端
亦暖筑序2 小时前
Java 8老系统SQL Agent实战:AI生成候选SQL,安全引擎拦截后再执行
java·人工智能·sql
CodeStats2 小时前
《源纹天书》卷一:归元初醒(第1-5章)
java