通俗理解软件开发中前后端开发的架构模式(后端逻辑分层的“三层架构”和前端逻辑分层的“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 告诉你"要把显示、逻辑、数据分开",而三层架构告诉你"后台的逻辑和数据具体该怎么分工"。

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

相关推荐
SamDeepThinking1 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩4 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码6 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev7 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波16 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯17 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking1 天前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好1 天前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程