应用分层
介绍
在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构
那么什么是应用分层呢?
应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各自的职责,多个层次之间协同提供完整的功
能.根据项目的复杂度,把项目分成三层,四层或者更多层
常见的MVC设计模式,就是应用分层的一种具体体现
但是目前主流的开发模式是"前后端分离"的方式,即后端工程师不需要关注前端的实现,所以又产生了一种新的分层架构:将整体架构分成表现层、业务逻辑层和数据层,这种分层方式也称为"三层架构".
- 表现层:就是展示数据结果和接受用户指令的,是最靠近用户的一层
- 业务逻辑层:负责处理业务逻辑,里面有复杂业务的具体实现
- 数据层:负责存储和管理与应用程序相关的数据
按照上面的层次划分,Spring MVC站在后端开发人员的角度,也给予了支持,在Spring的实现中有所体现
- Controller:控制层。接受前端发送的请求,对请求进行处理,并响应数据
- Service:业务逻辑层。处理具体的业务逻辑。
- Dao:数据访问层,也称为持久层。负责数据访问操作,包括数据的增、删、改、查。
2 简单应用
一个简单的图书管理系统例子:
//Controller层 -- UserController
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public String login(String userName, String password, HttpSession session) {
if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
return "用户名和密码不能为空";
}
if(!"admin".equals(userName) || !"123456".equals(password)) {
return "账号或密码错误";
}
session.setAttribute("userName", userName);
return "";
}
}
//Controller层 -- BookController
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/getList")
public List<BookInfo> getList() {
List<BookInfo> bookInfos = bookService.getList();
return bookInfos;
}
}
//Service层 -- BookServer
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public List<BookInfo> getList() {
List<BookInfo> bookInfos = bookDao.mockData();
for (BookInfo bookInfo : bookInfos) {
if(bookInfo.getState() == 1) {
bookInfo.setStateCN("可借阅");
}else {
bookInfo.setStateCN("不可借阅");
}
}
return bookInfos;
}
}
//Dao层 -- BookDao
@Repository
public class BookDao {
public List<BookInfo> mockData() {
List<BookInfo> books = new ArrayList<>();
//没有数据,因此直接模拟数据
for (int i = 0; i < 10; i++) {
BookInfo book = new BookInfo();
book.setBookId(i);
book.setBookName("图书"+i);
book.setAuthor("作者"+i);
book.setNum(i*10);
Random random = new Random();
book.setPrice(BigDecimal.valueOf(random.nextDouble()*100));
book.setPublishName("出版社"+i);
book.setState(1);
books.add(book);
}
return books;
}
}