最近我正在考慮過去在嘗試設計特定領域模型時遇到的一些問題,讓我們來簡單說一下Address,它可以使用給定的上下文進行編輯,但在另一個模式中是不可編輯的。我目前的想法是,我將同時擁有一個地址的價值對象版本和一個地址實體,這個地址可能附屬於某個客戶帳戶,以便派生它的身份。遵循DDD規範時,是否有任何價值對象工廠?
現在我意識到,如果我創建一個新地址,比如用戶輸入了一個新地址,那麼我很可能還需要能夠繼續編輯該地址並編輯任何地址預先存在的地址以及在同樣有界的情況下。出於這個原因,我可以假設在這種情況下地址應該被建模爲實體而不是一個價值對象。這導致我的主要問題是,如果在修改現有數據集或創建新數據時應始終使用實體,那麼創建任何Value對象的工廠是否合理?
隨着我遵循這一思路,開始出現的規則是應該只創建值對象來表示對應用程序來說是靜態的東西或者已經保存到數據庫中的東西,但不能在當前域環境中是瞬態的。因此,我應該創造任何價值對象的唯一方式就是當它們在聚合根存儲庫內或代表聚合根存儲庫用於永久性值或在靜態值的情況下在服務中重新水合/實現時。對我來說,這似乎開始顯得很清楚,但是我擔心我沒有閱讀過其他人得出相同結論的地方。無論哪種方式,我希望有人能夠證實我的結論,或者讓我直白。
「編輯操作可以更新用戶以引用新值」。這個建議正是我的問題的核心。我過去一直採用相同的假設,但最近我開始懷疑這一點,並懷疑具有價值對象的價值之一是否永遠不必猜測是否需要自己堅持。換句話說,實體會被修改,並且它們所做的一種方式是當它們對對象的引用發生變化時。在實體的情況下,該實體可能需要被創建/修改。值對象引用可能會嚴格意味着關係的變化。 – jpierson 2013-02-10 20:54:15
我想我談論的是關係變化的事實可能很明顯,我真的在談論只讀實體或者有些人認爲是快照而不是價值對象。謝謝你讓我變直!在我接受你的答案之前,我會保留這個問題,讓其他人有機會參加。 – jpierson 2013-02-10 21:00:41
也許你在想事件採購等事情?在這種情況下,只讀值對象顯示爲明確表示實體狀態更改的事件。 – eulerfx 2013-02-10 22:26:55