JavaWeb - 我們的開發規範(VO、DTO、BO、PO、DO、POJO)

網傳一張圖

PO(Persistant Object)持久對象

PO比較好理解

簡單說PO就是數據庫中的記錄,一個PO的數據結構對應着庫中表的結構,表中的一條記錄就是一個PO對象

通常PO裏面除了get,set之外沒有別的方法

對於PO來說,數量是相對固定的,一定不會超過數據庫表的數量

等同於Entity,這倆概念是一致的

 

BO(Business Object)業務對象

BO就是PO的組合

簡單的例子比如說PO是一條交易記錄,BO是一個人全部的交易記錄集合對象

複雜點兒的例子PO1是交易記錄,PO2是登錄記錄,PO3是商品瀏覽記錄,PO4是添加購物車記錄,PO5是搜索記錄,BO是個人網站行爲對象

BO是一個業務對象,一類業務就會對應一個BO,數量上沒有限制,而且BO會有很多業務操作,也就是說除了get,set方法以外,BO會有很多針對自身數據進行計算的方法

爲什麼BO也畫成橫跨兩層呢?原因是現在很多持久層框架自身就提供了數據組合的功能,因此BO有可能是在業務層由業務來拼裝PO而成,也有可能是在數據庫訪問層由框架直接生成

很多情況下爲了追求查詢的效率,框架跳過PO直接生成BO的情況非常普遍,PO只是用來增刪改使用

 

BO和DTO的區別

這兩個的區別主要是就是字段的刪減

BO對內,爲了進行業務計算需要輔助數據,或者是一個業務有多個對外的接口,BO可能會含有很多接口對外所不需要的數據,因此DTO需要在BO的基礎上,只要自己需要的數據,然後對外提供

在這個關係上,通常不會有數據內容的變化,內容變化要麼在BO內部業務計算的時候完成,要麼在解釋VO的時候完成

 

DO是什麼

一個是阿里巴巴的開發手冊中的定義:DO( Data Object)這個等同於上面的PO

另一個是在DDD(Domain-Driven Design)領域驅動設計中,DO(Domain Object)這個等同於上面的BO

 

我們的規範

開發規範

0、上面的 DO 只是一個概念,並不是說把類名後面加上“DO”

1、返回前端:ResultVO

2、返回微服務:DTO

3、所有的實體統一放在模塊 Common 下,Client 實體(VO/DTO)需要獨立一份出來;Common 模塊下需要創建 domain,然後 domain 下創建各種 POJO 包,然後每個 POJO 包 下先創建業務子包,然後開始創建 POJO 類

Ps:如果遇到公共類(如:ResultVO)放到 domain.vo 下。

4、所有泛型該加的需要加上

5、魔法值:只有一個類用到提出到當前類上面;多個類用到提出到 Const 常量類

6、註釋:類、接口、方法、代碼、字段

7、常用的 DEBUG 代碼提示被刪可以寫到單元測試裏

8、最簡單的 CRUD 也需要按照這領域模型規範來

9、Client 類只有接口和DTO,其餘工具、常量等類抽象到一個公共項目,並且每次提交新變化需要改版本

10、公共異常封裝:第一項公共異常拋出,剩餘具體業務分析後拋出

11、響應碼封裝(6位,前3位類型碼,後3位業務碼)

12、方法名儘可能不要縮寫,By多的時候可以用實體類

13、數據庫表名:t_項目/模塊名_po名(儘量不縮寫)

14、必要日誌打印:INFO:無論如何都要打印,DEBUG:排查問題打印。(微服務出入必須打印)

15、Controller 不允許有私有方法,統一挪到 Service 處理

16、代碼必須符合 Alibaba & Sonarqube 規範

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章