三层架构的理解

本文详细介绍了Java应用中的三层架构(Controller、Service和Dao),阐述了它们在处理前端请求时的协作流程,强调了面向接口编程以提高灵活性。原生逻辑中,所有操作都在一个类中完成;分层后,通过接口隔离职责,使维护更加便捷。
摘要由CSDN通过智能技术生成

三层架构:

层级概要具体作用
Controller:控制层接收数据、响应数据接收前端发送的请求,对请求进行处理,并响应数据
Service:业务逻辑层逻辑处理处理具体的业务逻辑
Dao:数据访问层(Data Access Object)(持久层)数据访问负责数据访问操作,包括数据的增、删、改、查

前端--------->Controller--------->Service--------->Dao--------->文件

过程:前端发起请求,先到达Controller控制层,Controller接收请求后,调用Service业务逻辑层进行逻辑处理,而逻辑处理的前提是先拿到数据,此时Service层就会去调取Dao层,Dao层再去调用文件当中的数据,把数据拿到后,返回给Service,Service进行逻辑处理后,将结果返回给Controller,Controller最后响应数据给前端。

最终Dao层的代码是要被Service层调用的,而数据访问Dao层的实现方式可能有很多。比如:我们访问的可能是文件中的数据 / 数据库中的数据 / 别人提供的接口获取到的数据。实现的方式有很多,要想灵活地切换各自实现,就要面向接口编程,在编写Dao层的具体实现之前,需要先定义一个Dao的接口,增强程序的灵活性和拓展性。

具体的逻辑:

创建了各层的接口与实现类,Service层需要获取Dao层的数据,就需要在Service的实现类中new出Dao的对象,用对象去调用Dao层实现类的方法以获取数据;对于Controller也是一样,它需要拿到经过Service层经过逻辑处理后的数据,也需要在实现类中new出Service对象,去调用Service的方法。

这样就层层耦合,拆分成了三层,虽然还是耦合性高,但是目前功能聚合,更易于维护了。

原本的逻辑:

    @RequestMapping("/listEmp")
    public Result list(){
        //1.加载并解析emp.xml
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);

        //2.对数据进行转换处理 -gender -job
        empList.stream().forEach(emp -> {
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");
            }
       /* for (Emp emp : empList) {
            String gender = emp.getGender();
            if ("1".equals(gender)) {
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");
            }
        }*/
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            }else if ("2".equals(job)) {
                emp.setJob("班主任");
            }else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });
        //3.响应数据
        return Result.success(empList);//
    }

分层后:

public interface EmpDao {
    //获取原始员工数据
    public List<Emp> listEmp();
}

public class EmpDaoA implements EmpDao {

    @Override
    public List<Emp> listEmp() {            //Dao的接口实现类
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
        return empList;
    }
}
public interface EmpService {
    //获取逻辑处理后的数据
    public List<Emp> listEmp();
}

public class EmpServiceA implements EmpService {
    private EmpDao empDao = new EmpDaoA();//Service最终是要调Dao层数据的,所以new一个Dao层的对象
    @Override
    public List<Emp> listEmp() {           //Service接口实现类
        List<Emp> empList = empDao.listEmp();//用dao的对象调用一个dao的方法(Dao层已经实现过了),获取数据
        empList.stream().forEach(emp -> {
            String gender = emp.getGender();
            if ("1".equals(gender)) {
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");
            }
            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;
    }
}
@RestController
public class EmpController {
    private EmpService empService = new EmpServiceA();
    @RequestMapping("/listEmp")
    public Result list(){
        List<Emp> empList = empService.listEmp();//调用Service的实现方法获取数据,也就是说,顺序是:Service要Dao层的对象获取数据,Controller层要Service的对象获取已经逻辑处理过的数据
        //3.响应数据
        return Result.success(empList);//
    }
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值