我越是探索DDD和存儲庫,我越感覺自己被吸引到域服務方法。存儲庫vs域服務
我的直覺中的某些東西並不喜歡這樣一個事實,即一個存儲庫(至少在我讀過的示例和文章中)不是單個語句的原子。
using (var customerRepository = GetCustomerRepository())
{
customerRepository.AddCustomerForDelete(someCustomer);
customerRepository.SaveChanges();
}
這裏有一堆我不喜歡的東西。一般來說,存儲庫本身成爲一個問題,必須維護(它是IDisposable並需要「提交」)。看起來我並沒有把持續性問題抽象得很多。
,似乎坐在我的直覺更好一個更簡單的方法是:
GetCustomerService().DeleteCustomer(someCustomer);
它的原子。沒有存儲庫的實例來維護,處理或保存更改。如果你真的真的需要工作的支持單元上的聚合根單人操作之外,將某些類型的數據範圍的支持(類似於一個TransactionScope):
using(var ds = new DataScope())
{
// both of these happen under the same underlying DbConnection or whatever
GetCustomerService().DeleteCustomer(someCustomer1);
GetCustomerService().DoSomethingElse(someCustomer2);
}
在兩個以上,例如起見,可以說他們在某個業務控制器中,而數據訪問的底層機制(坐在存儲庫或服務實現中)是一個實體框架ObjectContext。而客戶是一些聚合根。
請告訴我,存儲庫方法更好。
謝謝。
+1;不同意,但我喜歡這個問題 – Marijn 2010-12-21 14:39:48