2012-02-12 20 views
1

我在埃文斯的書中再次閱讀知識庫中的章節,但對以下問題我還不清楚:更新後需要將實體放回存儲庫嗎?

當我從存儲庫中對實體進行修改時,是否需要將實體放回到存儲庫?知識庫是否知道它重構的實體? (這似乎很明顯,如果我沒有改變我從資料庫中檢索到的實體,沒有必要添加實體回去吧)

感謝

+0

我知道這幾乎是一歲,但我想加意譯從書/段「領域驅動設計:應對複雜的軟件的心臟」,由埃裏克·埃文斯:存儲庫充當聚合內存集合,從而封裝存儲機制。 [/結束意譯在內存中的集合工作的兩種方法之一:他們給了價值觀和你有您對價值的任何變化來更新集合,或者他們給出的參考和都已經知道你所做的更改。不過,你仍然必須告訴它需要堅持的方式。 – tuespetre 2013-02-08 15:31:30

回答

3

可以肯定的是對你的儲存庫保存()方法,但對於關注一個很好的分離,我覺得它更好地應對變化的跟蹤和持久性的工作單元。大多數ORM將允許您一次性保存作爲業務交易一部分的所有修改後的實體,或者臨時保存個別實體。

http://richarddingwall.name/2009/10/22/repositories-dont-have-save-methods/

http://odetocode.com/blogs/scott/archive/2010/06/13/repositories-and-the-save-method.aspx

1

的倉庫通常包含含有方法,如保存的接口,更新和刪除。所以,是的,通過調用存儲庫上的這些方法,客戶端(域層)通常會「將實體放回」存儲庫中。

如果您的域名代碼知道,在一個給定的路徑,沒有任何變化都會進行,那麼它肯定不會需要調用更新/再次保存方法。但是,如果您不確定,調用這些方法並讓存儲庫決定如何(或是否)更新基礎數據存儲區可能是有意義的。

有實施庫及其與底層數據訪問層和數據存儲的交互方式不同。從理論上講,你可以用任何你認爲最好的方法來實現這一點。例如,倉庫可以查詢數據存儲和執行比較,尋找變化,以及。然而,在實踐中,許多實現對實體使用數據跟蹤(例如IsDirty()或isModified())來幫助存儲庫瞭解實體是否被域層更改以及是否需要更新。

希望這有助於提供一些方向。

相關問題