Author: Anders小明


(2008-1-12更新)

從以上的分析中,我們可以了解到Domain Model分為三種類型:
0. 全局常量對象
1. 長生命周期業務對象(類似保單對象);
2. 交易過程的Transaction對象,幾乎沒有生命周期的;
3. Request/Response對象。這類對象以前沒有識別的,通常和VO混在一起;但是在IAA中以及電信業的模型是這類對象是獨立存在,并被持久化的;Request對象建立在增量更新上很有用。當然他們也是幾乎沒有生命周期的。 
 
并非所有的業務系統都擁有這三類對象!相當一部分的業務系統,并沒有顯著的長生命周期對象,因而沒有明確的增量變更操作類型及其規則,業務操作是直接更新業務對象,也就沒有Request以及Response對象;同時此類業務系統的Transaction對象也通常不存在;

Domain Model的級別:
但不論是那種類型對象,都擁有一個屬性,對象等級;對于保險系統來說,保單對象,產品對象以及組織對象是一級對象,而險種和角色等都是二級對象;這點對于設計Repository以及服務粒度都有影響。

關于VO對象的討論:
VO對象是一種技術類型對象,存在于Web,Domain等層次,其存在的意義是提供集成能力;其意義是:1. 保護系統的信息邊界,提供一種結構可以使其它系統或者組件通過編碼方式獲取系統內信息的方式;2. 保護系統的事務邊界,領域對象技術上攜帶著持久化信息,通過VO可以屏蔽得以屏蔽。常見的VO對象存在于Web層和Domain層。
因此,VO對象的存在只是為了集成而存在,其是否存在的取決于兩個方面:框架提供的事務邊界以及對象路徑訪問能力。
Domain層VO對象,通常是用于不同Domain組件間的訪問。但隨著架構的改進,集成代碼獨立存在,而不再嵌入到組件內部,組件的邊界問題保護不復存在;更進一步的是,框架提供自動化的接口適配映射能力的增強。因而VO對象也失去存在的意義。
Web層VO對象,以SWF為例,早在SWF 1.x時代,框架就提供了豐富的對象路徑訪問能力,但其Web交互是典型的MVC2方式,事務邊界在view的render前關閉,因而導致需要特定的VO對象來避免持久化信息問題;而SWF 2.x時代,view的render是在事務邊界內,VO不再需要。