这是我参与「第五届青训营 」笔记创作活动的第12天
最近在编写Spring Boot 项目时,总是疑问为什么要在这么多的包下写这么多的内容. 当我们在写一个Spring Boot框架的Java Web程序时,总会编写如下的包/结构:
- Controller 层
- Service 层
- Mapper 层
- Entity 层
编写这几层在任何Java项目中都是绕不开的. 它们都代表了什么?为什么会产生这种架构?我们一起来看.
现代的后端服务终究不过是执行下面的逻辑: 获取参数-存取数据库数据-逻辑运算-返回结果. 这其中,大概率离不开数据库. 因此,与数据库的联系在Spring框架中变得非常重要.
Spring中的 Entity层和Mapper层就是为数据库而量身定制的. Entity层与数据库中的每一个表相对应,抽象出数据库中保存的数据的模型. Mapper层则将对数据库进行的操作封装成了Java接口. 我们常用的Mybatis包就是通过xml和Java接口一起实现了Mapper层,提供强大的可高度自定义的数据库操作.
Service层则完成了业务的主要处理逻辑. Service层下接入了Mapper层,能够完成对数据库的操作. Service层的上层则是Controller层,这个层的作用则是完成Service与http服务的交互. HTTP请求中传递的数据会在Controller层进行翻译, Service层中返回的数据也会在这里转换为适合由HTTP层传输的数据格式.
我在编写Spring程序时,常常会将总体的业务逻辑编写在Controller层,将拆分出来的小块的 具体的 和特殊数据有关的业务逻辑放在Service层. 当之后读到正式的对这几层的介绍时,我也思考了我这样做的意义. Service层可以看成是独立的小服务提供商,它们所提供的每一块小数据都为Controller这个大的整体提供支持. Service层在未来的微服务架构中可以独立地扩展为微服务集群,而不仅仅是一个Java方法. 所以我想,这样做或许能够对后续的分布式部署产生一些作用.