优秀的项目代码都是怎么分层的
Python涨薪研究所
共 2791字,需浏览 6分钟
·
2021-08-30 22:02
源 / 文/
一直以来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。今天借着这个文章的机会再来交流探讨一下。
先看看阿里手册是怎么约定的
开放接口层 终端显示层 Web 层 Service 层 Manager 层 DAO 层 外部接口或第三方平台
通常的项目结构
首先说在前面的是:这东西并没有一套通用的标准,不同公司或者团队的使用习惯和规范也不尽相同。
项目根目录/src/main/java
:放置项目Java源代码项目根目录/src/main/resources
:放置项目静态资源和配置文件项目根目录/src/test/java
:放置项目测试用例代码
/src/main/java
目录下的Java源代码的组织结构大家比较关心,这地方也只能给出一个通常典型的结构,毕竟不同项目和团队实践不一样,稍许有区别,但整体安排应该差不多。而且如果是多模块的项目的话,下面的结构应该只对应其中一个模块,其他模块的代码组织也大致差不多。|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|__constnt:存放常量定义
|__enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|__entity:放置数据库实体对象定义
|__dto:存放数据传输对象定义
|__vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|__intf:存放业务逻辑接口定义
|__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码
/src/main/resources
目录,里面主要存放静态配置文件和页面静态资源等东西:|_mapper:存放mybatis的XML映射文件(如果是mybatis项目)
|_static:存放网页静态资源,比如下面的js/css/img
|__js:
|__css:
|__img:
|__font:
|__等等
|_template:存放网页模板,比如thymeleaf/freemarker模板等
|__header
|__sidebar
|__bottom
|__XXX.html等等
|_application.yml 基本配置文件
|_application-dev.yml 开发环境配置文件
|_application-test.yml 测试环境配置文件
|_application-prod.yml 生产环境配置文件
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
和数据库DAO
层的操作对象严格划分出来,确保互相不渗透,不混用,问题应该就不大。Service
层处理的对象都定义在了dto
包里,而DAO
层处理的对象都放在了entity
包里了。项目结构划分总结
一些注意事项
Contorller
层参数传递建议不要使用HashMap
,建议使用数据模型定义Controller
层里可以做参数校验、异常抛出等操作,但建议不要放太多业务逻辑,业务逻辑尽量放到Service
层代码中去做Service
层做实际业务逻辑,可以按照功能模块做好定义和区分,相互可以调用Service
之间引用时,建议不要渗透到DAO
层(或者mapper
层),基于Service
层进行调用和复用比较合理Service
和数据库DAO
层的操作对象不要混用。Controller
层的数据对象不要直接渗透到DAO
层(或者mapper
层);同理数据表实体对象Entity
也不要直接传到Controller
层进行输出或展示。
好文推荐
有个程序员老公该多爽???
被“监控”的打工人:因算法裁定“效率低下”,近150名员工遭解雇
阿里某P8征婚:年薪170万,择偶要求却被群嘲!
END
顶级程序员:topcoding
做最好的程序员社区:Java后端开发、Python、大数据、AI
一键三连「分享」、「点赞」和「在看」
评论