1. 程式人生 > >Project structure layout

Project structure layout

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環境中以原始碼方式啟動專案,可以用如下方式啟動:

[email protected] ~/ $ cd project/com/qwfys/xihu
[email protected]:~/Public/project/com/qwfys/xihu$
[email protected]:~/Public/project/com/qwfys/xihu$ mvn spring-boot:run -Dspring-boot.run.profiles=beta

  eg. 要在beta環境中以jar包方式啟動專案,可以用如下方式啟動:

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

Summary

  這裡針對小型專案結構參照Spring boot、領域驅動模型、敏捷開發、應用即是服務等理念做了一個設計,兼顧到了前後端分離與前後端不分離兩種情型,讓專案結構更清晰。

  當下微服務架構已經深入人心,對於微服務的專案來講,這種專案結構也是適用的,結合Spring Cloud來構建微服務時,只需要做少量調整即可。

Reference