網傳一張圖

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 規范
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/257076.html
標籤:其他
上一篇:代理模式
