記一種通用的基礎架構方案

2021-09-26 06:55:42 字數 2560 閱讀 5594

基礎架構包:

***-framework-parent

***-framework-util

***-framework-common

——通用異常處理

——通用響應實體、響應code列舉定義

***-framework-modal

——實體類分模組定義

——各模組通用請求(組合實體類)和響應實體、響應code列舉定義

業務邏輯包:

***-service-api

——介面統一定義

***-service-aacenter-aaa

——包括dao、service、controller

***-service-aacenter-bbb

***-service-bbcenter-ccc

***-service-bbcenter-ddd

…一般的專案,每個需求請求引數都不同,自己定義組合實體類即可,但是響應引數卻是固定的json格式,比如

}

除了data不同,其餘都是固定的三個引數。

所以,在common工程中,首先定義乙個result介面,包含這三個方法。

定義介面的目的是將來不管是公用的的commoncode列舉,還是私用的各個實體類的列舉,都可以實現這個通用的介面。

不定義成繼承是因為,這不是一種擴充套件關係,不管哪個類都只使用這三個引數,前後端是約定好的。

定義介面的另乙個目的是限定型別,將來不管在**想要傳入這三個引數,都統一用resultcode接收,統一由resultcode獲取其實現類列舉的值。

public inte***ce resultcode
然後再common工程中定義乙個通用的commoncode列舉實現這個介面。

列舉就相當於簡寫的static final類,好處是限定的乙個大寫中可以包含多個規定好的值。

如果直接使用class就只能定義乙個大寫對應乙個code,true和message都要另外定義。

將來自己的實體類中也可以寫自己的列舉,實現這個介面,定義自己模組的code和message。

public enum commoncode implements resultcode

@override

public boolean success()

@override

public int code()

@override

public string message()

}

然後在common中定義乙個responseresult類,這是乙個核心過渡類,將來我們所有自己定義的***result都擴充套件這個類而來。

之所以用擴充套件是因為我們寫的每個result響應給前端的實體類中的三要素都一樣,但是data都不一樣。

該類的作用就是承上啟下,將inte***ce+enum(resultcode+commoncode)結構的三段式響應引數通過建構函式注入進來,使得我們每次寫***result時不用每個引數都自己賦一遍值,只用呼叫一下super即可。

public class responseresult 

public responseresult(resultcode resultcode)

// getter and setter要寫,這裡省略

}

各個開發人員在自己模組的實體單獨繼承使用示例:

public class queryresponseresultextends responseresult 

// 省略 get set

}

swagger開啟,直接在api工程建乙個config包,下面見乙個這個類即可。

@configuration

@enableswagger2

public class swagger2configuration

private apiinfo apiinfo()

}

private static final logger logger = logge***ctory.getlogger(exceptioncatch.class); 

logger.error("catch exception:{}",runtimeexception.getmessage());

//或者使用sl4j註解

"catch exception:{}",runtimeexception.getmessage());

日誌配置,檔名就叫logback-spring.xml

<?xml version="1.0" encoding="utf-8"?>

%d [%thread] %-5level %logger - %msg%n

utf8

$/***專案名稱***.%d.log

%d [%thread] %-5level %logger - %msg%n

0512

記一種思考

有些問題,一定有答案,我們可以花時間來研究它,如果一切皆有可能這個原則是正確的,那麼某些問題沒有答案也是可能的,關鍵是我們在知道結果之前很難知道他到底有沒有答案。到底如何做呢?想想曾經看過乙個挖井人的漫畫,畫裡面講的是乙個人在挖井,挖了很多井,沒有乙個挖到水,他認為這裡就沒有水了,這個圖告訴我們,有...

一種簡單通用的重複提交解決方案

對於重複提交,想到的最簡單的方案就是該方法保證冪等性,所謂冪等性就是f f x f x 多次運算結果都是一致的。比如對於innodb儲存引擎,rr級別以上的select查詢就天然具有冪等性。首先重複提交的原因有許多,比如惡意的重複提交,網路重發,分布式rpc的try重發,nginx重發等情況等等。下...

一種通用CMakeLists模板

1.cmake verson,指定cmake版本 cmake minimum required version 3.16 2.project name,指定專案的名稱,一般和專案的資料夾名稱對應 project demo 3.head file path,頭檔案目錄 include director...