Springboot的三层架构

embedded/2024/9/24 4:05:52/

        

java">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接口

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

        Service实现类

java">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接口

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

        Dao实现类 

java">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层

java">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.ppmy.cn/embedded/115895.html

相关文章

四十一、完成内容添加功能(使用go测试方法)

目录 一、添加model 二、完成相关dao 三、使用测试类进行测试 1、把光标防止要测试的方法上&#xff0c;右击并选择 2、自动会生成一个以dao文件加_test命名的文件 3、在其中完善方法并完成测试 四、完成content_create_handle 一、添加model 按数据库字段以及字段格式完…

力扣 LCR 020 回文子串 -Python

题目链接&#xff1a;LCR 020. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视…

网页通知设计灵感:CSS 和 JS 的 8 大创意实现

文章目录 前言正文1.霓虹灯风格的通知系统2.垂直时间轴通知3.动画徽章通知4.项目式通知5.多种状态通知&#xff1a;成功、错误、警告6.信息、警告、提示组件7.扁平化风格通知8.社交媒体风格弹出通知 总结 前言 网页通知如今已成为电商、社交平台等网站的常见功能&#xff0c;它…

苹果为什么不做折叠屏手机?

苹果为什么不做折叠屏手机&#xff1f;折叠屏手机在最近这些年里边&#xff0c;可以说是市场的一个主要在手机上的增长点。你像华W最近推出这个三折叠手机&#xff0c;引起了整个市场的轰动。 可是&#xff0c;为什么苹果到今天为止不为所动&#xff0c;还在那不停地在现在的这…

JIT(Just-In-Time Compilation)编译器及其原理实现

什么是JIT编译器&#xff1f; JIT编译器是一种特殊的编译器&#xff0c;它在程序运行期间动态地将字节码&#xff08;Bytecode&#xff09;转换为机器码。这种转换发生在程序执行时&#xff0c;而不是在程序启动之前。JIT编译器的主要目的是提高程序的执行速度和效率&#xff…

lora 微调3B模型微调前有5G 量化f16 后最后导出模型容量变小了只有2G了,为什么?

环境&#xff1a; lora 微调 问题描述&#xff1a; lora 微调3B模型微调前有5G 量化f16 后最后导出模型容量变小了只有2G了&#xff0c;为什么&#xff1f; 解决方案&#xff1a; 在使用LoRA&#xff08;Low-Rank Adaptation&#xff09;对大语言模型&#xff08;例如一个…

ELK企业级日志分析系统

目录 一、ELK简介 1.1 ELK概述 二、Elasticsearch简介 2.1 核心功能 2.2 架构与组件 2.3 使用场景 2.4 Elasticsearch特点与缺点 三、Logstash简介 3.1 主要特点 1、数据收集&#xff1a; 2、数据处理&#xff1a; 3、数据输出&#xff1a; 4、可扩展性&#xff1a; 5、…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景&#xff1a; 平常做rom相关开发时候经常需要与settings值打交道&#xff0c;需要独立或者存储一个settings的场景&#xff0c;群里有个学员朋友就问了一个疑问&#xff0c;那就是Settings的putString方式来存储字符&#xff0c;那么可以存储的最大字符是多少呢&#xff1…