Java Spring项目model/controller等基础包结构有何作用?
Spring 入门项目标准包结构作用说明
这几个包是Spring生态遵循「约定大于配置」原则形成的通用分层结构,核心目的是做代码职责解耦,避免业务逻辑、数据操作、接口逻辑全堆在一起难以维护,每个包的具体职责如下:
model:部分项目也会命名为entity/domain,专门存放和数据库表一一对应的实体类。比如做博客系统时,和文章表对应的Article类、和用户表对应的User类就放在这个包下,类的字段对应数据库表的列,通常会搭配JPA、MyBatis等ORM框架的注解做映射关系标记,这一层只定义数据结构,不写任何业务逻辑。repository:也常被称为DAO(数据访问对象)层,专门放直接和数据库交互的代码。所有对数据的增删改查底层操作都写在这一层,比如按用户id查用户信息、保存新文章这类操作,这一层只负责执行数据读写操作,不关心拿到的数据要做什么业务处理。如果用Spring Data JPA,甚至只需要定义接口继承通用的JpaRepository,不用写实现就能直接获得常用的CRUD能力。service:业务逻辑层,是整个项目核心业务规则的存放位置。比如用户注册时校验用户名是否重复、密码加密存储、新用户初始化默认权限这类完整的业务流程,全部写在这一层。service层会调用repository层完成数据读写,处理完完整业务逻辑后把结果返回给上层,不会直接对接前端请求,也不会直接写原生SQL操作数据库。controller:接口接入层,直接对外暴露可访问的HTTP接口。前端发起的请求最先到达这一层,它的职责非常单一:接收请求携带的参数、做基础的参数合法性校验、调用对应service的方法处理业务、拿到处理结果后封装成统一格式返回给前端,这一层不写核心业务逻辑,只做请求转发和响应格式适配。config:自定义配置类存放包。Spring Boot自带的默认配置无法满足需求时,你自己编写的配置类统一放在这里,比如跨域规则配置、拦截器注册配置、JSON序列化规则配置、Redis/OSS等第三方组件的初始化配置都属于这个包的范畴。包下的类一般会加@Configuration注解,项目启动时会自动加载这部分配置,覆盖默认的行为规则。
补充说明:这个包结构是社区长期实践形成的通用约定,不是Spring框架强制要求的,就算把所有类都写在根包下项目也能正常启动运行。但按照这个分层结构写代码,不管是自己维护还是和其他开发者协作,都能快速定位到对应功能的代码位置,入门阶段养成分层的习惯对后续开发复杂项目帮助很大。
内容的提问来源于stack exchange,提问作者m_novak
相关产品推荐
相关产品推荐

