1. 程式人生 > >微服務專案開發規範

微服務專案開發規範

1.專案命名:

xx-xx/xx-xx-xx

專案名-模組名/專案名-模組名-二級模組名

大小寫:全部小寫,單詞間使用-連線

2專案劃分

mes-base 共有基礎模組,抽出共用實體,共用工具類等

mes-discovery-eureka 服務註冊中心

mes-api-gateway 閘道器

mes-config 配置中心

mes-user 使用者模組

mes-equipment 裝置管理模組

等等,具體根據業務做具體劃分

3包命名:

com.kaicom.mes.xx

xx:模組名

4目錄結構:

1)src/main/java下

com.kaicom.mes.xx下有以下包

config/配置類  Xx

controller/介面

dao/mybatis對映介面類

enums/列舉類

model/資料庫表對應實體類

model/vm/請求體實體類

model/dto/返回體實體類

service/業務程式碼

util/工具類

feign/呼叫其他模組介面的客戶端和工廠類

XxXxApplication.java 啟動類,XxXx為模組名和二級模組名

2)Src/main/Resource為靜態資源目錄

Resource下常用靜態資源:

application.properties 公用配置檔案

application-dev.properties 開發環境配置檔案

application-test.properties 測試環境配置檔案

application-prod.properties 正式環境配置檔案

mapper/*.xml mybatis資料庫操作對映檔案

其他配置xx.properties檔案可自定義,可使用PropertySource進行使用,使用場景:其他自定義配置。儘量少用。

3)src/test/java

包名同src/main/java,同級目錄建立測試類。Xx.java可以建立XxTest.java使用SpringBootTest進行測試

4)pom.xml

對應包名

 <groupId>com.kaicom.mes.xx</groupId>

專案名
<artifactId>mes-user</artifactId>

版本
<version>1.0-RELEASE</version>

統一引入springboot 2.0.1.RELEASE版本,springcloud Finchley.RELEASE版本
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

註釋:springcloud Finchley.RELEASE官方文件 :

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#

各模組均需引入共有基礎模組

<dependency>
    <groupId>com.kaicom.mes</groupId>
    <artifactId>mes-base</artifactId>
    <version>1.0-RELEASE</version>
</dependency>

使用內網maven庫進行引入

5類命名規範

  1. 常量類

Constants.java

常量必須添加註釋

2)配置類

XxConfig.java

配置類命名必須要與技術名稱一致,如SwaggerConfig.java

自定義xx.properties使用類

XxProperties.java 類名與檔名一致

3)controller

XxController.java

嚴格避免業務程式碼侵入

4)dao

XxMapper.java Xx對應實體名稱

5)enums

Xx.java 必須新增列舉類註解

6)model

vm/XxVm.java

根據資料庫表名建立實體類Xx.java

7)service

XxService.java  方法必須註釋

impl/XxServiceImpl.java 具體實現類

8)mapper/Xx.xml

使用mybatis-gengerator進行自動生成,生成必須包含根據主鍵進行增刪改查的方法。

6介面說明(請求方式、註釋、引數校驗)

請求方式:

get查詢 put修改 post新增 delete刪除

restful路徑命名規則參考:

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

XxVm.java

屬性值註釋:@ApiModelProperty("使用者名稱")

引數校驗,message為錯誤提示資訊
@NotNull(message = "使用者名稱不能為空")
@Size(min = 5,max = 10,message = "使用者名稱長度應在5-10位之間")

校驗型別詳情檢視原始碼:javax.validation.constraints

XxController.java

介面類註釋:
@Api(description = "使用者")

具體介面方法註釋:
    @ApiOperation("認證,返回token")
使用@Valid啟用校驗
    public RtData login(@Valid @RequestBody LoginVm loginVm, BindingResult bindingResult) {

//判斷是否滿足校驗規則,否則返回封裝的返回體
               if(bindingResult.hasErrors()){
            return ResponseBuilder.build(RtCode.ILLEGAL_REQUEST);
        }
  swagger介面文件:http://localhost:port/swagger-ui.html#/

7druid使用與sql優化

使用者名稱/密碼: druid/druid         (在 application.properties進行配置)

點選sql監控可以檢視查詢比較慢的sql語句,對應優化

8返回實體解釋

controller中統一使用RtData組裝返回給客戶端的具體內容

在mes-base中封裝了返回體和返回程式碼,使用ResponseBuild生成RtData,

RtData包含code(返回程式碼)  msg(提示資訊,如錯誤資訊) data(具體返回實體),列舉類中已經列出常用的返回程式碼:

SUCCESS(200, "請求成功"),
ILLEGAL_REQUEST(400, "非法請求"),
NOT_AUTHORIZATION(401, "未授權"),
NOT_SUCCESS(402, "請求失敗"),
ILLEGAL_PARAM(403, "引數異常"),
FALL_BACK(405, "斷路返回"),
SERVER_ERROR(500, "伺服器異常");

前端和消費者可以根據RtCode判斷伺服器返回狀態。

9分頁外掛的使用

使用PageVm接收分頁引數 pageNum(頁數)和pageSize(資料條數),然後使用 PageHelper進行分頁查詢

PageHelper.startPage(page.getPageNum(),page.getPageSize());
Page<User> list = (Page<User>) userService.queryUsers();

實現原理:Mybatis攔截器對分頁引數進行注入

10 不同模組服務呼叫

統一使用Feign進行服務呼叫,在feign下新建feign客戶端如UserFegin.java,註解標明呼叫的服務名稱和具體介面路徑,使用UserFeignFactory.java進行斷路器返回和日誌統一處理。注意斷路器中返回的 RtCode為FALL_BACK,避免誤認為正常返回。詳情參照mes-equipment專案中UserFegin.java和UserFeignFactory.java的具體實現。

11日誌列印

統一使用:

private static final Logger logger = LoggerFactory.getLogger(xx.class);

info: 重要提示資訊

warn:警示資訊。

error: 錯誤資訊。

對關鍵操作必須進行日誌列印,如使用者修改密碼,賦予管理員許可權等。

12其他待補充