三层架构与解耦

分钟
三层架构与解耦
AI 概括

点击按钮,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://f3f3.top/posts/8525885/
作者
lyf
发布于
2026-06-14
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
lyf
Hello, I'm LyF.
公告
欢迎来到一飞的博客!。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
我和宝宝在一起已经
---------TSH ❤️ CXY---------
---------TSH
❤️
CXY---------
0 0 0 0 0 00
分类
标签
站点统计
文章
18
分类
8
标签
19
总字数
74,739
运行时长
0
最后活动
0 天前

文章目录

🤖 AI 助手

👋 你好!

我可以帮你解答关于这篇文章的问题