首页 > 其他分享 >分层解耦

分层解耦

时间:2024-12-19 20:20:19浏览次数:6  
标签:Service Dao Controller 分层 emp IOC empList

分层解耦

三层架构

处理逻辑呢,从组成上看可以分为三个部分:

  • 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。
  • 逻辑处理:负责业务逻辑处理的代码。
  • 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。

Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据。

  • Service:业务逻辑层。处理具体的业务逻辑。
  • Dao:数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。

基于三层架构的程序执行流程:

Controller->Service->Dao

  • 前端发起的请求,由Controller层接收(Controller响应数据给前端)
  • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)
  • Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)
  • Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)

解耦

3.3 IOC&DI

3.3.1 IOC&DI入门

任务:完成Controller层、Service层、Dao层的代码解耦

  • 思路:
    1. 删除Controller层、Service层中new对象的代码
    2. Service层及Dao层的实现类,交给IOC容器管理
    3. 为Controller及Service注入运行时依赖的对象
      • Controller程序中注入依赖的Service层对象
      • Service程序中注入依赖的Dao层对象

完整的三层代码:

  • Controller层:
@RestController
public class EmpController {

    @Autowired //运行时,从IOC容器中获取该类型对象,赋值给该变量
    private EmpService empService ;

    @RequestMapping("/listEmp")
    public Result list(){
        //1. 调用service, 获取数据
        List<Emp> empList = empService.listEmp();

        //3. 响应数据
        return Result.success(empList);
    }
}
  • Service层:
@Component //将当前对象交给IOC容器管理,成为IOC容器的bean
public class EmpServiceA implements EmpService {

    @Autowired //运行时,从IOC容器中获取该类型对象,赋值给该变量
    private EmpDao empDao ;

    @Override
    public List<Emp> listEmp() {
        //1. 调用dao, 获取数据
        List<Emp> empList = empDao.listEmp();

        //2. 对数据进行转换处理 - gender, job
        empList.stream().forEach(emp -> {
            //处理 gender 1: 男, 2: 女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            }else if("2".equals(gender)){
                emp.setGender("女");
            }

            //处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            }else if("2".equals(job)){
                emp.setJob("班主任");
            }else if("3".equals(job)){
                emp.setJob("就业指导");
            }
        });
        return empList;
    }
}

Dao层:

@Component //将当前对象交给IOC容器管理,成为IOC容器的bean
public class EmpDaoA implements EmpDao {
    @Override
    public List<Emp> listEmp() {
        //1. 加载并解析emp.xml
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
        return empList;
    }
}

3.3.2.1 bean的声明

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

注解 说明 位置
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)
@Component 声明bean的基础注解 不属于以上三类时,用此注解

标签:Service,Dao,Controller,分层,emp,IOC,empList
From: https://www.cnblogs.com/Yunyuzuiluo/p/18617872

相关文章

  • 交易系统:应用层、领域层分层架构设计
    大家好,我是汤师爷~线上线下交易系统的应用架构包括终端、应用层、领域层和关联系统。应用层能力应用层定义软件的应用功能,负责接收用户请求、协调领域层执行任务并返回结果。主要包括以下模块:1)C端服务模块为消费者提供完整的交易链路功能,包括加购、下单、支付、结算、拆单、......
  • Hive分层数据处理:从ODS到ADS的实现与应用
    在大数据开发中,数据分层处理是常见的架构设计模式,尤其在数据仓库建设中,分层架构便于数据组织和管理,提升开发效率。本文将以Hive为例,详细介绍ODS、DWD、DWS、ADS层的设计与实现。一、数据分层的意义解耦数据流:分层将原始数据、清洗数据、分析数据、应用数据分开,避免耦合......
  • Spring Boot 工程分层实战(五个分层维度)
    1、分层思想计算机领域有一句话:计算机中任何问题都可通过增加一个虚拟层解决。这句体现了分层思想重要性,分层思想同样适用于Java工程架构。分层优点是每层只专注本层工作,可以类比设计模式单一职责原则,或者经济学比较优势原理,每层只做本层最擅长的事情。分层缺点是层之间......
  • 【Docker】Docker镜像分层
    我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:Docker基本情况Docker基本命令Dock......
  • 1. 分层代理团队(Research Team)
    简介在本文中,我们将探索如何使用Langgraph框架创建一个层次化的ResearchTeam。这个系统整合了搜索和Web爬取功能,并通过一个监督代理来管理任务的分配,实现自动化的信息检索和处理。1.系统架构概述这个系统由以下三个主要组件组成:搜索代理:使用搜索工具查找相关网页。Web......
  • 新兴数据仓库设计与实践手册:从分层架构到实际应用(三)
    本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述;第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用;第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学习每一层次......
  • 新兴数据仓库设计与实践手册:从分层架构到实际应用(三)
    本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述;第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用;第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学习每一层次......
  • JavaWeb中的分层解耦
    第一步:控制反转@Component注解:将当前类交给IOC容器管理,成为IOC容器中的bean第二步:依赖注入@Autowired注解:运行时,IOC容器会提供被注解的类型的bean对象,并赋值给该变量要切换不同的实现时,只需要将被切换的Service实现中的@Component注释掉,将新的Service实现中加上@Co......
  • 动态分层强化学习(DHRL)算法
    动态分层强化学习(DHRL)算法详解一、引言在强化学习(ReinforcementLearning,RL)领域,面对复杂、大规模的任务,传统方法往往面临诸多挑战,如高维度状态空间导致的“维数灾难”、长期依赖与稀疏奖励等问题。为了克服这些挑战,分层强化学习(HierarchicalReinforcementLearning,HR......
  • 基于多主体主从博弈的区域综合能源系统低碳经济优化调度【分层模型】(Matlab代码实现)
      ......