1
A
回答
2
大多數時候我儘量分開我的圖層。通常我會將我的服務作爲業務邏輯的外牆。在業務邏輯我使用DI容器,如統一,以解決我的倉庫......
例子:
IUnityContainer container = IoCManager.Container;
using (var repository = container.Resolve<IRepository<Token>>())
{
return repository.Eagerly(f => f.Fetch<TokenSetting>(t => t.Settings))
.Where(t => t.Value == tokenGuid && t.Expired == null)
.FirstOrDefault();
}
我的商業邏輯現在包括我的基礎設施層(庫)上沒有依賴關係。對於一個偉大的Repository實現來看看NCommon。 Ritesh Rao爲DDD寫了一些很好的模式使用例子。
引用您的存儲庫是否是錯誤的是主觀的。我認爲DDD純粹主義者會告訴你它很可能是。 「你試圖達到多少SoC」是真正的問題。通常最好是通過鬆散耦合來爭取高內聚力,但有時候這可能是過度的。
希望這會有所幫助。
[EDITED]
存儲庫可以在域中存在。真的,他們坐在你的業務邏輯/模型和你的基礎設施模型之間。你是正確的依靠接口而不是實現。
看看馬丁福勒的 - Separated Interface Pattern。在我上面的例子中,我依賴於接口。 DI容器解析了我的具體存儲庫類的實際實現。這裏是我學習的一些樣本DDD圖。
相關問題
- 1. 在存儲庫中存儲vcr卡帶是否正確?
- 2. 在mongoengine ReferenceFields中存儲Derived類引用是否正確?
- 3. PySVN - 確定是否存在存儲庫
- 4. 讓實體調用存儲庫方法是否正確?
- 5. MSDN庫的Tree Menu中的段落是否存儲在數據庫中是否正確?
- 6. 什麼是正確的.NET_Folder來存儲所需的DLL引用?
- 7. 從我的存儲庫中運行2個方法的ActionResult是否正確?
- 8. ArrayList的ArrayList是否存儲引用?
- 9. 正確使用存儲庫/服務類
- 10. 在Maven存儲庫中找到正確版本的正確JAR
- 11. 路徑在數據庫中的存儲是不正確的
- 12. 如何檢查使用@WindowScoped存儲的對象是否正確存儲?
- 13. 靜態存儲庫是使用NHibernate的正確方法嗎?
- 14. 什麼是使用多個存儲庫的正確方法?
- 15. Git倉庫的正確密碼存儲
- 16. 正確的MVC存儲庫實例化
- 17. ssh存儲庫的憑據不正確
- 18. 存儲jquery引用是否合法?
- 19. 什麼是紫外線照射牆的正確方法?
- 20. 存儲過程是否存在沒有給出正確答案
- 21. 什麼是確定的存儲過程中是否存在
- 22. Azure Blob存儲是否存儲許多(小)通信日誌的正確位置?
- 23. Fedora 16存儲庫中是否有Rstudio?
- 24. SharedPreferences是否存儲在數據庫中?
- 25. 在UnitOfWork中存儲對通用存儲庫的引用
- 26. 如何正確測試php存儲庫
- 27. GIT:找不到存儲庫(SSH正在運行且存儲庫拼寫正確)
- 28. Laravel 4:如何正確使用存儲庫中的模型
- 29. C是否有庫存儲庫?
- 30. 數據庫正常化是否正確?
好的謝謝。但是存儲庫接口是域層的一部分 - 這意味着如果您使用DI並且只依賴於接口而不是實現,則可以在域層(也就是域服務)中使用存儲庫,那麼應該可以嗎? – 2010-11-10 20:10:27
你在那裏完全正確。我編輯了我的原始文章以包含更多詳細信息。您的存儲庫可以位於域內。要了解的重要一點是它們的功能,它可以調解業務和數據訪問層之間的通信。 – Daniel 2010-11-10 20:30:19
服務定位器是一種反模式:http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx – 2010-11-11 16:42:06