一、VO和DTO
VO: Value Object
DTO: Data Transfer Object
個人理解VO和DTO是類似的東西,原則上VO和DTO只有Public Fields,主要用於進程之間資料傳遞的問題,VO和DTO不會傳遞到展示層,在業務層就會被吸收。但看到很多人在建立VO和DTO時,也含有Setter,Getter屬性和一些其它的輔助方法,這也無可厚非,我自己也不能確定這對不對。望大家給出意見。
二、Entity和Domain Object
Entity和Domain Object應該是類似的東西,我覺得這兩者概念上可能與Biz Object(Business Object)有所不同,但我看到網上很多文檔都把他們當成類似的東西。
Entity和Domain Object除了有Setter,Getter屬性外,還有僅僅屬於自己的一些專有(special)方法,如CRUD及其他專有方法,和有一些Services介面,並不涉及Domain Object與Domain Object之間關係的一些方法。也就是說Domain Object負責資料持久化,這可以由其IDataServices介面來實現。Entity和Domain Object更強調具體是哪一個對象,或者說是執行個體化的Entity和Domain Object對象。
如果用Domain Object來設計程式,不自覺地就會遵守一些重構策略(如Divergent Change、Shotgun Surgery、Switch Statements等,具體可以看Rickie的blog),我們知道Domain Driven Design這本書出現在Refactoring這本書之後,看來也是Martin Fowler對Refactoring進一步總結、升華的結果。用Domain Object來設計程式,降低了類之間的耦合,可以不自覺地達到Refactoring結果。看來出現Refactoring後,Domain Object的出現只是時間的問題。
idior的O/R Mapping 基本概念和一個困擾我長時間的問題也談到了Entity和Domain Object
三、Biz Object
個人理解Biz Object更加專註於業務實現,主要強調業務類之間的關係。這也是它與Entity或Domain Object的不同之處。
在具體的程式中有時還會有Manager類,用於管理Biz Object和作為Biz Object的Facade。
我一直沒有成型的架構,下一步抽時間看看Domain Model 探索和EDRA,我更覺得架構不用通用,可以根據一些典型的業務建立合適的架構,更希望大家能給出好的架構。