零基础网站建设视频,wordpress漫画采集,如何投诉网站制作公司,思乐网站建设我为什么要写这篇近来#xff0c;和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。很多小伙伴表示网上下载下来的开源项目看不懂#xff0c;项目结构和代码分层看得很蒙#xff0c;不知道应该以一个什么样的思路去学习和吸收别人的项…我为什么要写这篇近来和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。很多小伙伴表示网上下载下来的开源项目看不懂项目结构和代码分层看得很蒙不知道应该以一个什么样的思路去学习和吸收别人的项目。好今天熬夜肝了这篇文章和大家一起来交流探讨一下不足之处也请小伙伴们批评指正。先看看阿里是怎么约定的我印象中以前在看《阿里巴巴Java开发手册》时好像有关于工程结构和应用分层相关的内容于是我回翻了一下果然有它这里面讲的内容大概就是关于一个正常的企业项目里一种通用的项目结构和代码层级划分的指导意见。按这本书上说的一般分为如下几层开放接口层终端显示层Web 层Service 层Manager 层DAO 层外部接口或第三方平台由于书中的篇幅关系它这地方讲得比较笼统了估计初学者看了还是会懵所以接下来结合实际项目代码结构来唠一唠具体的项目结构和代码分层。通常的项目结构首先说在前面的是这东西并没有一套通用的标准不同公司或者团队的使用习惯和规范也不尽相同。我们就以当下非常火热的Spring Boot典型项目结构为例创建出来的项目应该总体分为三大层项目根目录/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放置工具类和辅助代码然后接下来/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等数据模型定义的区分。这在《阿里巴巴Java开发手册》中倒是做了一个所谓的严格区分那本书上是这样去定义的DOData Object与数据库表结构一一对应通过DAO层向上传输数据源对象。DTOData Transfer Object数据传输对象Service或Manager向外传输的对象。BOBusiness Object业务对象。由Service层输出的封装业务逻辑的对象。AOApplication Object应用对象。在Web层与Service层之间抽象的复用对象模型极为贴近展示层复用度不高。VOView Object显示层对象通常是Web向模板渲染引擎层传输的对象。Query数据查询对象各层接收上层的查询请求。注意超过2个参数的查询封装禁止使用Map类来传输。老实讲看到这么多对象的定义我也是很蒙的。实际项目开发时我觉得没有必要刻意照搬去定义这么多层对象这样后续做对象转换工作都能烦skr人。出于简单起见我个人觉得只要保证业务逻辑层Service和数据库DAO层的操作对象严格划分出来确保互相不渗透不混用问题应该就不大。比如在我上面举例的这个项目的代码结构中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层进行输出或展示。