三、Spring 应用分层
4.1、 介绍
什么是应⽤分层?
应⽤分层是⼀种软件开发设计思想,它将应⽤程序分成N个层次,这N个层次分别负责各⾃的职责,多个 层次之间协同提供完整的功能.根据项⽬的复杂度,把项⽬分成三层,四层或者更多层. 常⻅的MVC设计模式,就是应⽤分层的⼀种具体体现.
为什么需要应⽤分层?
在最开始的时候,为了让项⽬快速上线,我们通常是不考虑分层的.但是随着业务越来越复杂,⼤量的代码混在⼀起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动⼀处就牵⼀发⽽动全⾝等问题.
如何分层(三层架构)
学习"MVC"时, 就是把整体的系统分成了Model(模型),View(视图)和Controller(控制器)三个层次,也就是将⽤⼾视图和业务处理隔离开,并且通过控制器连接起来,很好地实现 了表现和逻辑的解耦,是⼀种标准的软件分层架构。
⽬前现在更主流的开发⽅式是"前后端分离"的⽅式,后端开发⼯程师不再需要关注前端的实现, 所以对 于Java后端开发者,⼜有了⼀种新的分层架构:把整体架构分为表现层、业务逻辑层和数据层.这种分层 ⽅式也称之为"三层架构".
1. 表现层:就是展⽰数据结果和接受⽤⼾指令的,是最靠近⽤⼾的⼀层;
2. 业务逻辑层:负责处理业务逻辑, ⾥⾯有复杂业务的具体实现;
3. 数据层: 负责存储和管理与应⽤程序相关的数据
• Controller:控制层。接收前端发送的请求,对请求进⾏处理,并响应数据。
• Service:业务逻辑层。处理具体的业务逻辑。
• Dao:数据访问层,也称为持久层。负责数据访问操作,包括数据的增、删、改、查.
MVC和三层架构
MVC模式强调数据和视图分离,将数据展⽰和数据处理分开,通过控制器对两者进⾏组合. 三层架构强调不同维度数据处理的⾼内聚和低耦合,将交互界⾯,业务处理和数据库操作的逻辑分开. ⻆度不同也就谈不上互相替代了,在⽇常的开发中可以经常看到两种共存的情况,⽐如我们设计模型 层的时候往往也会拆分出业务逻辑层(Service层)和数据访问层(Dao层)。 但是⼆者的⽬的是相同的,都是"解耦,分层,代码复⽤"。
软件设计原则:⾼内聚低耦合
⾼内聚:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联 系程度越⾼,则内聚性越⾼,即"⾼内聚"。
低耦合::软件中各个层、模块之间的依赖关联程序越低越好。修改⼀处代码,其他模块的代码 改动越少越好.
4.2、代码构造
控制层:接收前端发送的请求,对请求进⾏处理,并响应数据
package com.example.book.controller;
import com.example.book.model.BookInfo;
import com.example.book.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
BookService bookService ;
@RequestMapping("/getBookList")
public List<BookInfo> getBookList() {
return bookService.getBookList();
}
}
业务逻辑层:处理具体的业务逻辑。
package com.example.book.service;
import com.example.book.dao.BookDao;
import com.example.book.model.BookInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class BookService {
@Autowired
private BookDao bookDao;
public List<BookInfo> getBookList() {
//1、获取图书数据
//2、对图书的数据进行处理
//3、返回数据
//mock 表示虚拟假数据
List<BookInfo> bookInfos =bookDao.mockData();
for (BookInfo bookInfo : bookInfos) {
if (bookInfo.getStatus() == 1) {
bookInfo.setStatusCN("可借阅");
} else {
bookInfo.setStatusCN("不可借阅");
}
}
return bookInfos;
}
}
数据访问层:负责数据访问操作,包括数据的增、删、改、查
package com.example.book.dao;
import com.example.book.model.BookInfo;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@Component
public class BookDao {
public List<BookInfo> mockData() {
//对于已知的数据量 建议初始化容量
List<BookInfo> bookInfos = new ArrayList<>(15);
for (int i = 1; i <= 15; i++) {
BookInfo bookInfo = new BookInfo();
bookInfo.setId(1);
bookInfo.setBookName("图书" + i);
bookInfo.setAuthor("作者" + i);
bookInfo.setCount(new Random().nextInt(200));
bookInfo.setPrice(new BigDecimal(new Random().nextInt(100)));
bookInfo.setPublish("出版社" + i);
bookInfo.setStatus(i % 5 == 0 ? 0 : 1);
bookInfos.add(bookInfo);
}
return bookInfos;
}
}
4.3、应用分层的优点
• 降低层与层之间的依赖,结构更加的明确,利于各层逻辑的复⽤
• 开发⼈员可以只关注整个结构中的其中某⼀层,极⼤地降低了维护成本和维护时间
• 可以很容易的⽤新的实现来替换原有层次的实现
• 有利于标准化
原文地址:https://blog.csdn.net/m0_63272315/article/details/145227591
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!