当前位置: 首页 > news >正文

Springboot的三层架构

        

package com.wzb.ThreeLevelsExercise20240919;public class Exercise {// 内聚:内聚是指一个模块或内部各元素的紧密程度。高内聚则是一个模块或类中的所有功能都是紧密相关的,专注于完成单一任务// 高内聚的好处:// 1.易于维护:因为模块内的功能高度相关,所以说修改一个功能不会影响到其他不相关的功能,便于业务的变动和代码的维护// 2.可复用性强:高内聚的模块通常功能明确,所以说易于在不同的项目中进行复用// 耦合:耦合是指不同的模块或类之间的依赖程度。低耦合则意味着各个模块或类之间的依赖关系较少,彼此独立、互不影响// 低耦合的好处:// 1.易于修改:因为低耦合,各个模块或类的依赖关系较少,所以说修改一个模块不会对其他模块有重大影响// 2.提高灵活性:模块之间的独立性增强,可以更加容易的替换和升级某个模块// 软件开发的要求:高内聚,低耦合// 三层架构// 在进行程序设计极其开发的过程中,尽可能使每一个接口、类、方法的职责单一(单一职责原则):复杂度降低、可读性提高、扩展性更好// 一般在开发中,服务端可以分为三层架构// 1.数据访问(Dao):负责业务数据的维护操作,包括对于数据的增、删、改、查// 2.逻辑处理(Service):负责业务逻辑处理的代码// 3.请求处理、响应数据(Controller):负责、接收页面的请求;给页面响应数据// Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据// Service:业务逻辑层。处理具体的业务逻辑// Dao:数据访问层(Data Access Object),也称为持久层,负责数据访问的操作,包括数据的增、删、改、查// 基于三层架构程序的执行流程:// 1.前端发起请求,由Controller层接收// 2.Controller层调用Service层进行逻辑处理(Service层处理完成之后,会将结果返回给Controller层)// 3.Service层调用Dao层(逻辑处理过程中需要用到的数据需要从Dao层中获取)// 4.Dao层操作文件(数据库)中的数据(Dao层拿到的数据返回给Service层)// 按照三层架构的思想,若对业务逻辑层进行变更,不会影响到控制层和数据访问层// 对应的代码要写在对应的包名中————// 控制层包名:xxxx.controller// 业务逻辑层包名:xxxx.service// 数据访问层包名:xxxx.dao
}

        Service层

        Service接口

package com.wzb.ThreeLevelsExercise20240919.Service;import com.wzb.ResponseImprove20240919.Emp;import java.util.List;// 业务接口
public interface EmpService {// 获取员工列表public List<Emp> listEmp();
}

        Service实现类

package com.wzb.ThreeLevelsExercise20240919.Service;import com.wzb.ResponseImprove20240919.Emp;
import com.wzb.ThreeLevelsExercise20240919.Dao.EmpADao;
import com.wzb.ThreeLevelsExercise20240919.Dao.EmpDao;import java.util.List;
import java.util.function.Consumer;// 业务实现类
public class EmpAService implements EmpService{// 获得dao层对象private EmpDao empDao = new EmpADao();// 按照业务逻辑处理员工数据@Overridepublic List<Emp> listEmp() {// 1.调用dao层,获取数据List<Emp> empList = empDao.listEmp();// 2.按照业务逻辑,对得到的数据进行处理empList.stream().forEach(new Consumer<Emp>() {@Overridepublic void accept(Emp emp) {String gender = emp.getGender();if (gender.equals("1")) {emp.setGender("男");} else if (gender.equals("女")) {emp.setGender("女");} else {emp.setGender("Error");}String job = emp.getJob();switch (job) {case "1" -> emp.setJob("讲师");case "2" -> emp.setJob("班主任");case "3" -> emp.setJob("就业指导");default -> emp.setJob("Other");}}});// 返回员工表return empList;}
}

        Dao层

        Dao接口

package com.wzb.ThreeLevelsExercise20240919.Dao;import com.wzb.ResponseImprove20240919.Emp;import java.util.List;// 数据访问层接口(指定标准)
public interface EmpDao {// 获取员工列表数据public List<Emp> listEmp();
}

        Dao实现类 

package com.wzb.ThreeLevelsExercise20240919.Dao;import com.wzb.ResponseExercise20240919.utils.XmlParserUtils;
import com.wzb.ResponseImprove20240919.Emp;import java.util.List;public class EmpADao implements EmpDao {@Overridepublic List<Emp> listEmp() {// 加载并解析emp.xml文件,然后返回数据String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
}

        Controller层

package com.wzb.ThreeLevelsExercise20240919.Controller;import com.wzb.ResponseExercise20240919.Result.Result;
import com.wzb.ResponseImprove20240919.Emp;
import com.wzb.ThreeLevelsExercise20240919.Service.EmpAService;
import com.wzb.ThreeLevelsExercise20240919.Service.EmpService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;// 控制层:接收前端发送的请求,对请求进行处理,并响应数据
@RestController
public class EmpController {// 获得业务层对象private EmpService empService = new EmpAService();@RequestMapping("/listEmpTogether")public Result list() {// 调用service层,获取数据List<Emp> empList = empService.listEmp();// 响应数据return Result.success(empList);}
}

 

 

 


http://www.mrgr.cn/news/30594.html

相关文章:

  • JDK自带的序列化
  • C++ : 继承问题 [virtual函数调用,为什么禁止在virtual使用默认参数]
  • 向上转移和向下转型
  • U盘显示未被格式化:深入解析、恢复策略与预防之道
  • 网络安全 DVWA通关指南 DVWA Stored Cross Site Scripting (存储型 XSS)
  • 蓝桥杯嵌入式客观题合集
  • 【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】
  • 英飞凌最新AURIX™TC4x芯片介绍
  • Lecture 4 Page Table
  • C++—string类接口与用法大总结(其中涉及STL基础)
  • 【Vmware16安装教程】
  • 登录后继续执行方法
  • pg入门3—详解tablespaces2
  • RK3568平台(网络篇)MAC地址烧录
  • 【LabVIEW】事件结构的用法
  • 消息队列-Kafka(概念篇)
  • 小琳AI课堂:强化学习初阶
  • OJ在线评测系统 前端开发设计优化通用菜单组件二 调试用户自动登录
  • JavaFX实现视频播放功能
  • SPI接口通信协议浅谈成都自动化开发