Project structure layout

project structure layout

Problem

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

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

Resolve

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

在这里插入图片描述

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

ItemDescriptionRemarks
xihu项目根目录
README.md引导说明文档
doc文档目录
CHANGELOG发布版本日志
pom.xml项目对象模型,名称不可更改,具体可参见maven规范
src/main/javajava源码目录,按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.webservelet相关包路径
com.qwfys.app.xihu.converter转换相关包路径
com.qwfys.app.xihu.XihuApplication项目入口
com.qwfys.app.xihu.XihuApplicationTests测试样例
application.yml配置文件
application-snapshot.yml每日构建环境配置文件
application-alpha.ymlalpha环境配置文件
application-beta.ymlbeta环境配置文件
application-release.ymlrelease环境配置文件
com/qwfys/app/xihu/data/mapperMyBatis SQL-Mapping配置文件目录
config/mybatis/mybatis-config.xmlMybatis配置文件
staticspring boot静态资源目录
templatespring boot模板目录
logback.xmllogback日志系统配置文件

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwfys200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值