spring開發實踐手記

2021-09-11 02:07:09 字數 1574 閱讀 2863

sofaboot 中springmvc分層

bizservice-impl(manager層介面的實現以及vo和model的轉換)

shared(manager層的介面)

common

dal(資料庫層面,比如mybatis相關**)

service

façade(給其他微服務模組提供的介面)

integration(整合其他模組介面的**,或者mq等中介軟體的**匯聚)

core

model(領域模型及列舉等)

service(service層及倉儲層**)

test

單測,後端**主要依賴單測保證質量,測試用例保證80%的行覆蓋率和70%的分支覆蓋率,100%的通過率。所有測試資料均不能影響資料庫中現有的資料,測試完成後需清理測試資料(資料準備和清理工作不需要開發人員處理,開發人指定資料及相關條件,由測試框架的前置處理器和後置處理器處理,整個測試框架是基於testng和動態**實現的)。

webweb的controller和config等

乙個完整的請求的**流程是controller->manager->service->repository->dal,其中manager層或service層可能會調integration層的介面

1) controller中的**非常簡潔,業務邏輯提取到manager層,manager層需要校驗入參,呼叫service,將處理的結果轉換成vo。

2) integration層,處理整合其他模組的介面或處理mq等中介軟體模組

在不同的層面,引數的形態不同

1)在web層面是vo(request、response等),所有引數必須配置相應的校驗,比如@notnull或指定正規表示式等

2)在service層是領域模型model

3)在dal層是do

不同形態的物件通過convertor工具類的靜態方法,手動呼叫getter和setter進行轉換,不允許使用copyproperties方法拷貝物件的值,避免潛在問題,比如引數名稱不一致導致的。

封裝asserts工具類,提供isempty notnull istrue 等斷言方法,對於斷言錯誤的情況,給定錯誤資訊,丟擲runtimeexception,異常資訊被aop動態**的異常階段捕獲,輸出異常資訊。

如mysql插入資料返回狀態為0,則丟擲相應的異常,指定錯誤資訊。

好處是:**保證了資料的正確性校驗,並且沒有過多的throw exception

異常和日誌通過aop統一捕獲

和業務無關的橫切面都可以使用aop來完成,我們在操作日誌也有使用,只是對原先**仍有所侵入,可以有所優化。異常管理這塊可以相應改造,可大大減少**中的try catch**,並在統一的位置進行異常日誌記錄。

原因在阿里開發手冊中有提到,

1)避免潛在的oom問題,

2)執行緒命名,方便定位。

3)開發者理解各個引數的意義,靈活運用。

threadpoolexecutor的詳解可參考

方便新增新的策略時,不需要修改if else

比如異常的統一捕獲

responseentityexceptionhandler

@controlleradvice

spring 分模組開發簡單實踐

spring 分模組開發 背景 我們一般採用spring struts ibatis的開發模式,使用spring統管業務bean,當專案很大時,面臨乙個bean命名衝突問題,如果和struts一樣,採取分模組的方式,不同的模組有自己的命名空間,將會避免幾個並行開發的子系統或模組共用一套bean配置檔...

Oracle開發手記

由於開發中經常遇到一些問題,想必大家也經常遇到,寫下來做乙個備忘錄.1.oracle問題,採用iis訪問oracle時,一定要注意客戶端的oracle資料夾的訪問許可權,這個是一定要注意設定的.2.oracle的字符集問題.由於很多情況下,需要不同的oracle資料庫資料交換,但是可能出現資料庫之間...

hnbk 開發手記

ajax 輸入驗證 表單資料的驗證可以分為客戶端驗證與伺服端驗證,為了安全起見,避免客戶端驗證被跳過,伺服端驗證往往是必須的。舉個例子來說,有個網頁必須輸入帳戶號碼與姓名,帳戶號碼是 x的格式,x為數字 當使用者在表單中輸入資料時,在過去往往只能靠使用者完成資料輸入,再按下 送出 按鈕,才可以進行伺...