国庆节10月1日
--


Web后端三层架构(Controller/Service/Dao)的设计思想与分层解耦思路
三层架构是将后端代码按照职责划分为三个层次的设计模式:
分层解耦的目标是降低层与层之间的依赖程度,遵循”高内聚、低耦合”的软件设计原则。
高内聚:一个模块中各个元素之间联系紧密 低耦合:软件中各个层/模块之间的依赖关联程度越低越好
1com.itheima2├── controller # 控制层3│ └── UserController.java4├── service # 业务逻辑层5│ ├── UserService.java (接口)6│ └── impl/7│ └── UserServiceImpl.java (实现类)8├── dao # 数据访问层9│ ├── UserDao.java (接口)10│ └── impl/11│ └── UserDaoImpl.java (实现类)12└── pojo # 实体类13 └── User.java1package com.itheima.controller;2
3import com.itheima.pojo.User;4import com.itheima.service.UserService;5import com.itheima.service.impl.UserServiceImpl;6import org.springframework.web.bind.annotation.RequestMapping;7import org.springframework.web.bind.annotation.RestController;8import java.util.List;9
10@RestController11public class UserController {12 private UserService userService = new UserServiceImpl();13
14 @RequestMapping("/list")15 public List<User> list(){16 List<User> userList = userService.findAll();17 return userList;18 }19}1// 接口2package com.itheima.service;3import com.itheima.pojo.User;4import java.util.List;5
6public interface UserService {7 public List<User> findAll();8}9
10// 实现类11package com.itheima.service.impl;12import com.itheima.dao.UserDao;13import com.itheima.dao.impl.UserDaoImpl;14// ...(省略import)15
16public class UserServiceImpl implements UserService {17 private UserDao userDao = new UserDaoImpl();18
19 @Override20 public List<User> findAll() {21 List<String> lines = userDao.findAll();22 // 解析数据、封装User对象并返回23 // ...24 }25}1// 接口2package com.itheima.dao;3import java.util.List;4
5public interface UserDao {6 public List<String> findAll();7}8
9// 实现类10package com.itheima.dao.impl;11import cn.hutool.core.io.IoUtil;12import com.itheima.dao.UserDao;13import java.io.InputStream;14import java.nio.charset.StandardCharsets;15import java.util.ArrayList;16import java.util.List;17
18public class UserDaoImpl implements UserDao {19 @Override20 public List<String> findAll() {21 InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");22 ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());23 return lines;24 }25}前端请求 → Controller层接收并响应 → Controller调用Service层处理业务逻辑 → Service调用Dao层获取数据 → Dao层返回数据给Service → Service处理完后返回Controller → Controller响应给前端
new UserServiceImpl(),当需要切换实现类时就必须修改Controller代码,这就是耦合问题,需要通过IOC/DI来解决无
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


