對值物件的理解

boycott發表於2008-06-20
DDD中實體物件與值物件的解釋比較抽象。 主要根據持續性與ID識別來區分。
但ID並非某一元素的直觀自然屬性, 而是經過分析建模之後確定了實體類,然後賦給實體類來達到跟蹤,區別,儲存目的的一個特值。 而在分析之前,如何判斷一個概念是否有ID,這才是難點。

結合專案實踐及DDD一書中的理論,感覺應該從以下幾方面分析:

1. 某一概念是主動還是從屬性的。如果是從屬性的,且這種從屬性的生命週期嚴格依賴於某實體,如可以考慮成為值物件的候選。

2. 某一概念是否可以被複用,共享,複製。象對應領域屬性,規格,策略,規則的類,雖然對其他實體類的依賴性不是很強,可以獨立存在。可以被不同的實體物件(不是指類)共享,複製,複用。如人的地址屬性, 畫筆的顏色字型屬性,語言級別如string字串。

3. 值物件建立後的作用:
3.1 往往是做為臨時物件來進行計算,得出同型別的新值物件。來給實體物件業務使用。如建立查詢標準這一臨時物件,將此查詢標準與其他查詢標準組合,生成新查詢標準, 給業務應用來進行過濾或查詢。
3.2 建立做為臨時物件來作為實體的業務行為的一個引數,以給業務行為提供驗證檢驗稽核某一規則或是特徵之用
3.3 值物件提供的一些組合方法一般滿足閉包特徵:即 vo.add(VO anotherVO),vo.minus(VO anotherVO)都反回另一值物件。

4. 值物件的儲存和與其相關聯的實體類儲存,由實體類來負責實體類的儲存。透過設定實體對類與值類的級聯關係。來達到實體類負責值物件的儲存管理。


對於banq舉例jj3中的 forumState為值物件,我存在疑問,因為forumState應該需要儲存吧?比如某一時期的最高發貼數(這隻屬推測,JJ3原始碼的閱讀正在日程表上,但現在還不瞭解)。



[該貼被boycott於2008-06-20 16:22修改過]

相關文章