先看看阿里是怎么约定的
一般分为如下几层
- 开放接口层
- -终端显示层
- Web 层
- Service 层
- Manager 层
- DAO 层
- 外部接口或第三方平台
通常的项目结构
- 项目根目录/src/main/java:放置项目Java源代码
- 项目根目录/src/main/resources:放置项目静态资源和配置文件
- 项目根目录/src/test/java:放置项目测试用例代码
位于/src/main/java目录下的Java源代码的组织结构大家比较关心
各个目录详细介绍:
|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|__consist:存放常量定义
|__enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|__entity:放置数据库实体对象定义
|__dto:存放数据传输对象定义
|__vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|__intf:存放业务逻辑接口定义
|__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码
DTO/VO/DO等数据模型定义的区分
-
DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
- DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
- AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
- Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
例:Service层处理的对象都定义在了dto包里,而DAO层处理的对象都放在了entity包里。
一些注意事项
1、Contorller层参数传递建议不要使用HashMap,建议使用数据模型定义
2、Controller层里可以做参数校验、异常抛出等操作,但建议不要放太多业务逻辑,业务逻辑尽量放到Service层代码中去做
3、Service层做实际业务逻辑,可以按照功能模块做好定义和区分,相互可以调用
4、功能模块Service之间引用时,建议不要渗透到DAO层(或者mapper层),基于Service层进行调用和复用比较合理
5、业务逻辑层Service和数据库DAO层的操作对象不要混用。Controller层的数据对象不要直接渗透到DAO层(或者mapper层);同理数据表实体对象Entity也不要直接传到Controller层进行输出或展示。