应用分层
介绍
在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构
那么什么是应用分层呢?
应用分层是一种软件开发设计思想,他将应用程序分层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 {@Autowiredprivate BookService bookService;@RequestMapping("/getList")public List<BookInfo> getList() {List<BookInfo> bookInfos = bookService.getList();return bookInfos;}
}
//Service层 -- BookServer
@Service
public class BookService {@Autowiredprivate 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;}
}