MVC 三层结构
xxx-app
xxx-common
xxx-entity
xxx-dao
xxx-service
xxx-web
- xxx-common & xxx-entity 可能存在需要相互引用的情况,如果发生这种情况,相应的代码就只能写到 xxx-web,common & entity 分层也就么有了意义
- dao 作为 本项目中的底层对数据库的操作模块,本身并不会被其它app 调用,只是作为 service-impl 的部分组成
- service 作为对外提供服务的模块,在目前的模式之下,service 会引入 common, entity, dao等,对其它项目依赖不友好,甚至引起各种依赖冲突问题
- 在开发模式下,使用 SNAPSHOT 版本,如果只引入 service , 但是由于service 底层依赖 common, entity 等模块,RELEASE 优先级高于 SNAPSHOT ,此时需要引入 再次引入common, entity 注入真正需要的版本
- service 层的建议,只包含 api 定义,以及部分 DTO, VO, Enum, 做到轻量级对外提供;同时对其他项目友好,不会引发诸如依赖冲突等问题
一个相对友好的实践结构
一个个人建议的项目结构:
xxx-app
xxx-service-api
- com.xxx.业务名称.service.api
- XXXRpc/XXXService
- com.xxx.业务名称.vo // 响应结果
- com.xxx.业务名称.dto/request // 数据传输/请求对象
- com.xxx.业务名称.enumeration // 枚举
- com.xxx.业务名称.service.api
// vo,dto/request,enumeration 仅为接口定义中包含的,不需要对外暴露的部分,依然在service里面
xxx-service
- com.xxx.业务名称.config
- com.xxx.业务名称.controller
- com.xxx.业务名称.service
- com.xxx.业务名称.core
- com.xxx.业务名称.core.model // 数据库实体
- com.xxx.业务名称.core.enumeration
- com.xxx.业务名称.core.vo
- com.xxx.业务名称.core.dto
- com.xxx.业务名称.model/bean // 数据库实体 与
com.xxx.业务名称.core.model
二选一 - com.xxx.业务名称.util
- com.xxx.业务名称.
xxx-service-api 为轻量级的对外接口定义,包含接口