領域模型層次劃分

業務代碼由於需要經過好幾層的處理,每層需要封裝對應的模型, setter/getter代碼量不少,而且基本上字段都是相同的,所以在上層模型中使用BeanMapper.map(obj, Class)方法轉換,會消耗些許性能,但代碼量減少。
模型對象的作用範圍也討論出來一個規範:
1:上層模型提供轉換方法。
2:簡單的轉換使用BeanMapper轉換,複雜的實現BeanConvertor接口,在領域模型中調用BeanConvertor進行轉換。這樣領域模型的代碼會比較清淅,不會顯得臃腫。
3:領域邊界定義
應用層:Form、Vo
外部服務層(AO層):TO
內部服務層:DTO
數據層:Entity
領域模型對象存放在相應層的模塊內, 模塊內再細分到java包(package),應用層的領域模型對象內提供轉換成外部服務層和內部服務層的方法,內部服務層的領域模型提供轉換成數據層模型對象的方法,其中外部服務層需要對外發布服務,所以內部服務層領域模型對象還需要提供轉換成外部服務層領域模型的方法,以及外部服務層領域模型成內部服務層領域模型的方法。
具體方法如:
CarrierForm:
CarrierTO toCarrierTO();//Form轉To
CarrierVo:
static CarrierVo ofCarrierTO(CarrierTO);//To轉Vo
CarrierDTO:
CarrierTO toCarrierTO();//DTO轉TO
CarrierDTO ofCarrierTO(CarrierTO);//TO轉DTO
Carrier toEntity();//DTO轉Entity
CarrierDTO ofEntity(Carrier);//Entity轉DTO
可擴展:BeanConvertor通過BeanConvertorFactory這個工廠類創建和獲取。


這樣設計的優點是每層的模型的作用邊界和提供的功能都很清淅,便於理解,當某一層的代碼需要調整時,牽扯不會很大,實現代碼層次的解耦。

以後有時間再把思路詳細的寫出來,出一份代碼。

發佈了40 篇原創文章 · 獲贊 19 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章