Project structure layout

版权声明:知识在分享中升华,思想在交流中沉淀,欢迎大家转载。 https://blog.csdn.net/qwfys200/article/details/82995443

project structure layout

Problem

  经常会在项目中看到很糟糕的项目结构与项目组织方式,比如代码可读性不高、组织结构诡异、命名言不达意且前后不致等。

  前段时间看到阿里巴巴出了一个关于Java代码规范的小册子,感觉非常的好,但是很多时候,并不是所有的项目都是基于大型分布式架构的,所以这里针对小型项目代码组织方式做了一些调整,并基于目前最流行的Spring boot项目结构来展开。

Resolve

  下面是一个全新的项目结构图:

在这里插入图片描述

  现项目结构图简要说明如下:

Item Description Remarks
xihu 项目根目录
README.md 引导说明文档
doc 文档目录
CHANGELOG 发布版本日志
pom.xml 项目对象模型,名称不可更改,具体可参见maven规范
src/main/java java源码目录,按maven规范,里面全是*.java文件
src/main/sources 配置文件根目录
src/test/java 测试用例java项目根目录
src/test/sources 测试用例配置文件根目录
com.qwfys.app.xihu 包根路径
com.qwfys.app.xihu.controller 业务控制器层包路径 DepartmentController
com.qwfys.app.xihu.controller.view 业务控制器层Java Bean包路径 DepartmentView
com.qwfys.app.xihu.business 业务逻辑层包路径
com.qwfys.app.xihu.business.spec 业务逻辑层业务逻辑接口包路径 DepartmentBusiness
com.qwfys.app.xihu.business.impl 业务逻辑层业务逻辑实现包路径 DepartmentBusinessImpl
com.qwfys.app.xihu.business.model 业务逻辑层Java Bean包路径 DepartmentModel
com.qwfys.app.xihu.data 数据访问层包路径
com.qwfys.app.xihu.data.repository 数据访问层主入口包路径
com.qwfys.app.xihu.data.repository.spec 数据访问层主入口接口包路径 DepartmentRepository
com.qwfys.app.xihu.data.repository.impl 数据访问层主入口实现包路径 DepartmentRepositoryImpl
com.qwfys.app.xihu.data.mapper 数据访问层MyBatis映射包路径 DepartmentMaper
com.qwfys.app.xihu.data.domain 数据访问层Java Bean映射包路径 DepartmentDomain
com.qwfys.app.xihu.data.redis.spec 数据访问层Redis接口包路径 DepartmentRedis
com.qwfys.app.xihu.data.redis.impl 数据访问层Redis实现包路径 DepartmentRedisImpl
com.qwfys.app.xihu.data.mongo.spec 数据访问层Mongo接口包路径 DepartmentMongo
com.qwfys.app.xihu.data.mongo.impl 数据访问层Mongo实现包路径 DepartmentMongoImpl
com.qwfys.app.xihu.common 通用代码包路径
com.qwfys.app.xihu.common.base 通用代码基类包路径
com.qwfys.app.xihu.common.constant 通用代码常量包路径
com.qwfys.app.xihu.common.enums 通用代码枚举包路径
com.qwfys.app.xihu.common.exception 通用代码业务异常包路径
com.qwfys.app.xihu.common.util 通用代码工具类包路径
com.qwfys.app.xihu.config 配置代码包路径
com.qwfys.app.xihu.web servelet相关包路径
com.qwfys.app.xihu.converter 转换相关包路径
com.qwfys.app.xihu.XihuApplication 项目入口
com.qwfys.app.xihu.XihuApplicationTests 测试样例
application.yml 配置文件
application-snapshot.yml 每日构建环境配置文件
application-alpha.yml alpha环境配置文件
application-beta.yml beta环境配置文件
application-release.yml release环境配置文件
com/qwfys/app/xihu/data/mapper MyBatis SQL-Mapping配置文件目录
config/mybatis/mybatis-config.xml Mybatis配置文件
static spring boot静态资源目录
template spring boot模板目录
logback.xml logback日志系统配置文件

Feature

  1、整个项目结构的设计主要针是对前后端不分离的情形的。对于前后端分离的情形来说,整个项目结构也是完全适用的,无非是将前端静态资源相关东西拿掉,与此同时借助Swagger UI之类的组件对外输出接口文档,并对外提供标准的Restful风格的api即可。

  2、整个项目结构的设计主要参照了敏捷开发的理念,遵循代码即是文档的项目开发理念,项目文档通过README.md、Swagger UI、CHANGELOG展开。其中,README.md主要用于对项目做整体性描述;Swagger UI主要用于输出项目接口文档;CHANGELOG主要用于记录项目版本之间的功能变化。

  3、整个项目结构的设计在命名上参考了领域模型设计的理念,采用后续法来清晰整个项目的结构,如User这个领域对象,在项目中各层相关的元素有UserController、UserBusiness、UserBusinessImpl、UserRepository、UserMapper、UserMapper.xml、UserDomain、UserModel、UserView等,后续有特定的语境、语意。

  4、整个项目结构的设计在Java包的命名上采用了应用即是服务的设计的理念,包的命名由组织名.层次类型.应用名做为包的根路径,如com.qwfys为组织名,app代表业务应用,如果是基础框架,则是framework,xihu为应用名,也就是说,xihu是一个可以独立部署的服务。

  5、整个项目结构的设计部署上参考了每日构建(snapshot)、内测一(alpha)、内测二(beta)、发布(release)的研发流程,针对研发活动的每一阶段都有与之对应的运行环境与之对应,项目在不同的环境中启动只要添加不同的启动参数即可。

  eg. 要在beta环境中以源码方式启动项目,可以用如下方式启动:

lwk@qwfys ~/ $ cd project/com/qwfys/xihu
lwk@qwfys:~/Public/project/com/qwfys/xihu$
lwk@qwfys:~/Public/project/com/qwfys/xihu$ mvn spring-boot:run -Dspring-boot.run.profiles=beta

  eg. 要在beta环境中以jar包方式启动项目,可以用如下方式启动:

lwk@qwfys ~/ $ cd project/com/qwfys/xihu
lwk@qwfys:~/Public/project/com/qwfys/xihu$
lwk@qwfys:~/Public/project/com/qwfys/xihu$ mvn clean install -Dmaven.test.skip=true
lwk@qwfys:~/Public/project/com/qwfys/xihu$ java -jar target/xihu-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

Summary

  这里针对小型项目结构参照Spring boot、领域驱动模型、敏捷开发、应用即是服务等理念做了一个设计,兼顾到了前后端分离与前后端不分离两种情型,让项目结构更清晰。

  当下微服务架构已经深入人心,对于微服务的项目来讲,这种项目结构也是适用的,结合Spring Cloud来构建微服务时,只需要做少量调整即可。

Reference

猜你喜欢

转载自blog.csdn.net/qwfys200/article/details/82995443