Loading
713 字
4 分钟

三层架构与分层解耦

2026-05-17
浏览量 加载中...
AI 摘要

三层架构与分层解耦#

定义#

三层架构是将后端代码按照职责划分为三个层次的设计模式:

  • Controller(控制层):接收前端发送的请求,对请求进行处理,并响应数据
  • Service(业务逻辑层):处理具体的业务逻辑
  • Dao(数据访问层):负责数据访问操作,包括数据的增、删、改、查

分层解耦的目标是降低层与层之间的依赖程度,遵循”高内聚、低耦合”的软件设计原则。

高内聚:一个模块中各个元素之间联系紧密 低耦合:软件中各个层/模块之间的依赖关联程度越低越好

语法/用法#

三层架构代码结构#

com.itheima
├── controller # 控制层
│ └── UserController.java
├── service # 业务逻辑层
│ ├── UserService.java (接口)
│ └── impl/
│ └── UserServiceImpl.java (实现类)
├── dao # 数据访问层
│ ├── UserDao.java (接口)
│ └── impl/
│ └── UserDaoImpl.java (实现类)
└── pojo # 实体类
└── User.java

Controller层代码#

package com.itheima.controller;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import com.itheima.service.impl.UserServiceImpl;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
private UserService userService = new UserServiceImpl();
@RequestMapping("/list")
public List<User> list(){
List<User> userList = userService.findAll();
return userList;
}
}

Service层代码(接口+实现)#

// 接口
package com.itheima.service;
import com.itheima.pojo.User;
import java.util.List;
public interface UserService {
public List<User> findAll();
}
// 实现类
package com.itheima.service.impl;
import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
// ...(省略import)
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public List<User> findAll() {
List<String> lines = userDao.findAll();
// 解析数据、封装User对象并返回
// ...
}
}

Dao层代码(接口+实现)#

// 接口
package com.itheima.dao;
import java.util.List;
public interface UserDao {
public List<String> findAll();
}
// 实现类
package com.itheima.dao.impl;
import cn.hutool.core.io.IoUtil;
import com.itheima.dao.UserDao;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
@Override
public List<String> findAll() {
InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");
ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());
return lines;
}
}

执行流程#

前端请求 → Controller层接收并响应 → Controller调用Service层处理业务逻辑 → Service调用Dao层获取数据 → Dao层返回数据给Service → Service处理完后返回Controller → Controller响应给前端

常见场景#

  1. 几乎所有企业级Web项目的标准分层结构
  2. 需要将数据读取、业务逻辑、请求处理分离的场景
  3. 需要提高代码复用性和可维护性的项目

注意事项#

  1. 单一职责原则:一个类或一个方法只做一件事,只管一块功能,使类、接口、方法的复杂度更低、可读性更强、扩展性更好
  2. 三层架构的好处:复用性强、便于维护、利于扩展
  3. 接口+实现的设计:Service和Dao层使用接口定义规范,实现类负责具体逻辑,便于替换实现
  4. 直接new导致耦合:如果直接在Controller中new UserServiceImpl(),当需要切换实现类时就必须修改Controller代码,这就是耦合问题,需要通过IOC/DI来解决

相关链接#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
三层架构与分层解耦
https://blog.tsh520.cn/posts/javawebai/后端基础/三层架构与分层解耦/
作者
团子和蛋糕
发布于
2026-05-17
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-05-17,距今已过 34 天

部分内容可能已过时

评论区

[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:00 0:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]
我和宝宝在一起已经
---------TSH CXY---------
---------TSH
CXY---------
0 0 0
00 00 00
最近更新
站点统计
文章
84
动态
20
记录次数
89
分类
6
标签
78
总字数
94,329
运行时长
0
最后活动
0 天前