例如,如果我有2個聚合根AR1和AR2,AR1以某種方式更新AR2 - 在存儲庫中存儲更改的正確方法是什麼? AR1是否應該調用存儲庫方法?讓實體調用存儲庫方法是否正確?
2
A
回答
2
我不喜歡讓存儲庫提交更改到數據庫的想法。
在我的情況下,xRepository.Add(x)僅將實體/ AR附加到當前的工作單元。
要執行db的實際提交,我在我的uow上調用commit。
例如。
C#
using(var uow = UoW.Begin()
{
var ar1Repo = new Ar1Repository(uow);
var ar1 = ar1Repo.FindById(123); //fetch already persistent entity
var ar1.MakeChangesToAr2();
//both ar1 and ar2 are persistent and known by the UoW
//so no need to add them to the repositories since they
//are already _in_ the repositories
uow.Commit();
}
或:
using(var uow = UoW.Begin()
{
var ar1Repo = new Ar1Repository(uow);
var ar2Repo = new Ar2Repository(uow);
var ar2 = new AR2();
var ar1 = new AR1(AR2);
ar1.MakeChangesToAr2();
//attach the new entities to the uow
ar1Repo.Add(ar1);
ar2Repo.Add(ar2);
uow.Commit();
}
這樣,您就可以一次提交,而不是試圖做的每個實體原子提交你就可能會犯對象問題變化的整個批次,圖表。
這個想法是基於Jimmy Nilssons在他的着作「應用領域驅動設計和模式」中的想法。
-1
我想在AR2中有一個名爲Save()的方法。該方法將實例化存儲庫以保存自己。然後,AR1可以調用AR2上的Save()方法。
+0
這真的是要走的路嗎?這聽起來不像它的域名的一部分。實體不應該知道他們正在被持續? – 2010-11-12 07:22:41
+0
這將使它更像是活動記錄比真正的DDD – 2010-11-19 11:41:48
相關問題
- 1. 來自實體的調用存儲庫方法
- 2. 如何在存儲庫querybuilder中調用實體的方法
- 3. 靜態存儲庫是使用NHibernate的正確方法嗎?
- 4. 什麼是使用多個存儲庫的正確方法?
- 5. 在存儲庫中存儲vcr卡帶是否正確?
- 6. 保存Hibernate JPA子實體的正確方法是什麼
- 7. PySVN - 確定是否存在存儲庫
- 8. 從我的存儲庫中運行2個方法的ActionResult是否正確?
- 9. 實體框架:無法調用存儲過程,代碼生成不正確
- 10. 正確的MVC存儲庫實例化
- 11. 是否可以確定實例方法是否在原型方法中調用?
- 12. 是否正確引用存儲庫中的外牆
- 13. 如何確保使用實體框架存儲庫調用不被緩存?
- 14. 實體框架的通用存儲庫方法中的錯誤
- 15. 在python應用中存儲類實例的正確方法
- 16. 準備Vuex存儲數據的正確方法爲AJAX調用
- 17. 檢查URL是否是createObjectURL調用結果的正確方法?
- 18. 通過實體框架無法正確執行存儲過程
- 19. DDD存儲庫和實體
- 20. 什麼是使用實體框架的正確方法?
- 21. 它是使用實體框架的正確方法嗎?
- 22. 我是否正確使用* ngFor方法?
- 23. 哪個是在實體框架中調用存儲過程的最佳方法
- 24. 實體對象是否應該由存儲庫公開?
- 25. 我是否正確調用?
- 26. 查看任意對象是否爲JPA實體的正確方法是什麼?
- 27. 存儲參數的正確方法?
- 28. 這是用存儲過程執行CRUD的正確方法嗎?
- 29. 什麼是使用Shelve存儲物品的正確方法?
- 30. 首先使用實體框架代碼實現存儲庫的通用方法
偉大的觀點羅傑,但我不認爲這回答的主要問題是是否可以在存儲庫上有一個實體調用方法。我認爲普遍的共識是「不,不允許實體調用存儲庫方法」,因爲它是持久性無知的間接突破,並使測試更加困難。 – jpierson 2011-03-21 13:30:21