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

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

相关推荐
Jelena157795857929 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
神明不懂浪漫10 小时前
【第五章】Java中的继承与多态
java·开发语言
AI多Agent协作实战派12 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit12 小时前
Java+Ai+vue
java·spring·maven
qq_25183645712 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive12 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿12 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧13 小时前
Eclipse 批量文本替换
java·ide·eclipse
程序员清风13 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
一只枫林13 小时前
MySQL内、外连接知识点汇总
java·前端·数据库