长沙便宜网站建设,英语门户网站织梦源码,房产网站模板,饿了么网站做生鲜吗目录 一、IOCDI入门
二、三层架构
数据库访问层
业务逻辑层
控制层 一、IOCDI入门
在软件开发中#xff0c;IOC#xff08;Inversion of Control#xff09;和DI#xff08;Dependency Injection#xff09;是密切相关的概念。 IOC#xff08;控制反转DI入门
二、三层架构
数据库访问层
业务逻辑层
控制层 一、IOCDI入门
在软件开发中IOCInversion of Control和DIDependency Injection是密切相关的概念。 IOC控制反转 IOC是一种设计原则通过它可以实现程序的松耦合。传统的控制流程是由程序员直接编写代码控制对象的创建和调用关系而控制反转则是将这种控制权交给一个容器例如IOC容器来管理。换句话说控制反转就是控制权的转移由程序员转移到容器中容器负责创建对象并管理对象之间的依赖关系。 DI依赖注入 DI是实现IOC的一种具体方式。它是指在对象创建的过程中通过将对象所依赖的其他对象即依赖关系注入到对象中从而实现对象之间的解耦。这样对象不再负责自己的依赖关系而是由外部容器在创建对象时提供所需的依赖。 依赖注入可以通过构造函数注入、属性注入或方法注入等方式来实现。其中最常见的是构造函数注入在这种方式下对象在创建时必须提供其所需的依赖否则无法正确实例化对象。
综合起来说IOC是一种设计原则DI是实现IOC的具体技术手段。通过DI我们可以在应用程序中实现控制反转让对象之间的依赖关系由容器来管理从而提高代码的可维护性、可测试性和灵活性。
要把某个对象交给IOC容器管理需要在对应的类上加上如下注解之一
注解说明位置ControllerComponent的衍生注解标注在控制器类上ServiceComponent的衍生注解标注在业务类上RepositoryComponent的衍生注解标注在数据访问类上由于与mybatis整合用的少Component声明bean的基础注解不属于以上三类时用此注解
Autowired注解默认是按照类型进行自动装配的去IOC容器中找某个类型的对象然后完成注入操作 入门程序举例在EmpController运行的时候就要到IOC容器当中去查找EmpService这个类型的对象而我们的IOC容器中刚好有一个EmpService这个类型的对象所以就找到了这个类型的对象完成注入操作。 二、三层架构
那其实我们上述案例的处理逻辑呢从组成上看可以分为三个部分 数据访问负责业务数据的维护操作包括增、删、改、查等操作。 逻辑处理负责业务逻辑处理的代码。 请求处理、响应数据负责接收页面的请求给页面响应数据。
按照上述的三个组成部分在我们项目开发中呢可以将代码分为三层 Controller控制层。接收前端发送的请求对请求进行处理并响应数据。 Service业务逻辑层。处理具体的业务逻辑。 Dao数据访问层(Data Access Object)也称为持久层。负责数据访问操作包括数据的增、删、改、查。
基于三层架构的程序执行流程 前端发起的请求由Controller层接收Controller响应数据给前端 Controller层调用Service层来进行逻辑处理Service层处理完后把处理结果返回给Controller层 Serivce层调用Dao层逻辑处理过程中需要用到的一些数据要从Dao层获取 Dao层操作文件中的数据Dao拿到的数据会返回给Service层 代码实现
数据库访问层
public interface EmpDao {public ListEmp listEmp();}
Repository // 将当前对象交给IOC容器管理,成为IOC容器的bean
public class EmpDaoA implements EmpDao {Overridepublic ListEmp listEmp() {// 1、加载并解析xml文件
// String file this.getClass().getClassLoader().getResource(emp.xml).getFile();String file XXXXXXXXXXXXx;System.out.println(file); // 输出路径ListEmp empList XmlParserUtils.parse(file, Emp.class);return empList;}}业务逻辑层
// 业务逻辑层
public interface EmpService {public ListEmp listEmp();}Primary // 使用Primary注解当存在多个相同类型的Bean注入时加上Primary注解来确定默认的实现。
Service
public class EmpServiceA implements EmpService {// 创建数据库访问层对象Autowiredprivate EmpDao empDao;Overridepublic ListEmp listEmp() {ListEmp empList empDao.listEmp();// 2、对数据转化处理empList.stream().forEach(emp - {// 性别String gender emp.getGender();if (1.equals(gender)){emp.setGender(男);}else{emp.setGender(女);}String job emp.getJob();if(1.equals(job)){emp.setJob(讲师);}else if(2.equals(job)){emp.setJob(班主任);}else{emp.setJob(就业指导);}});return empList;}}控制层 RestController
public class EmpController {// 创建业务对象// 运行时,从IOC容器中获取该类型对象,赋值给该变量Autowiredprivate EmpService empService;RequestMapping(listEmp)public Result list(){ListEmp empList empService.listEmp();// 3、响应数据return Result.success(empList);}}三层架构的优点 复用性强 便于维护 利用扩展 解决了耦合问题
首先需要了解软件开发涉及到的两个概念内聚和耦合。 内聚软件中各个功能模块内部的功能联系。 耦合衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则高内聚低耦合。 高内聚指的是一个模块中各个元素之间的联系的紧密程度如果各个元素(语句、程序段)之间的联系程度越高则内聚性越高即 高内聚。 低耦合指的是软件中各个层、模块之间的依赖关联程序越低越好。