一、三层架构
介绍*
三层架构就是:把一个完整的代码块,按照各自功能的不同分为:请求、响应数据层、逻辑处理层、数据访问层
案例——>
上述案例的处理逻辑从功能上看可以分为三个部分,也就是上面所说的:请求、响应层,逻辑处理层,数据访问层。
–数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。
–逻辑处理:负责业务逻辑处理的代码。
–请求处理、响应数据:负责接收页面的请求,给页面响应数据。
按照上述的三个组成部分,在我们实际的业务开发中,按照这三个部分,我们将代码分为三层:
Cotroller:接收前端的请求,对请求进行处理,并且响应数据。
Service:具体的业务逻辑。
Dao:负责数据的访问操作,包括数据的增、删、改、查等。
//UserController
//接收前端发送的数据请求,并响应数据
@RestController
public class UserController {
private UserServiceA userService = new UserServiceA();
@RequestMapping("/listUser")
public Result listUser() throws Exception {
// 调用service, 获取数据
List<User> userList = userService.listUser();
// 响应数据
return Result.success(userList);
}
}
//UserServiceA
//处理具体的业务逻辑
public class UserServiceA {
private UserDaoA userDao = new UserDaoA();
public List<User> listUser() throws Exception {
//调用 dao 层, 查询数据
List<User> userList = userDao.listUser();
//2. 对数据进行逻辑处理 - 对地址 address 中的 province 属性后, 添加上 "省/市"
for (User user : userList) {
Address address = user.getAddress();
address.setProvince(address.getProvince()+" 省/市");
address.setCity(address.getCity()+" 市/区");
user.setAddress(address);
}
return userList;
}
}
//UserDao
//负责数据的访问操作,包括数据的增、删、改、查。
public class UserDaoA {
public List<User> listUser() throws Exception {
//1. 从文件中查询数据
String file = UserController.class.getClassLoader().getResource("user.xml").getFile();
List<User> userList = XmlParserUtils.parse(file);
System.out.println(userList);
return userList;
}
}
二 、分层解耦
1.耦合问题
在软件开发领域涉及到的两个概念:内聚和耦合。
1、内聚:软件中各个功能模块内部的功能联系。
2、耦合:衡量软件中各个层、模块之间的依赖、关联程度。
3、我们在进行开发时要遵循软件设计原则:高内聚低耦合。
前面开发的代码,基于三层架构分为了Controller、service以及到Dao三层。在这三层中controller调用service,service调用dao。而在controller中调用service,就需要在controller中new一个service对象,而在service中调用dao,就需要在service中new一个dao对象。此时controller的代码九耦合了service,而service也就耦合了dao。
在软件开发领域,我们会经常听到一种设计原则:高内聚,低耦合。
高内聚:指的是一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句,程序段)之间的联系程度越高,则内聚性越高,即“高内聚”。
低耦合:指的是软件中各个层、模块之间的依赖关联程度越低越好
高内聚、低耦合的目是使程序模块的可重用性、移植性大大增强。
三、解耦思路
前面的代码,在编写的时候,需要什么对象就直接new一个就可以了。但是这样层与层之间的代码就耦合了,当service层的实现层变了之后,我们还需要修改controller层的代码。
比如:当我们要使用UserServiceB,不在使用UserServiceA了,那忙此时,我们还需要修改UserController层的代码,需要将Controller中变量声明,有以及创建实例的代码都改动。
那此时,Controller与Service层的代码就是耦合的。
创作中~~~~~~~~~~