關於使用Repository pattern
,UoW pattern
有許多討論。我很明白何時以及爲什麼使用Repository pattern
。 我們只是說我有幾個聚合根。下一步是什麼?我更喜歡哪種模式/實現?使用比純粹的NHibernate會話更復雜的解決方案的原因是什麼?存儲庫模式,UoW模式,純NHibernate會話
謝謝!
關於使用Repository pattern
,UoW pattern
有許多討論。我很明白何時以及爲什麼使用Repository pattern
。 我們只是說我有幾個聚合根。下一步是什麼?我更喜歡哪種模式/實現?使用比純粹的NHibernate會話更復雜的解決方案的原因是什麼?存儲庫模式,UoW模式,純NHibernate會話
謝謝!
庫模式是一種抽象是-imho-沒有必要。它只允許您預定義可在整個系統中多次使用的特定查詢,並提高可讀性。
存儲庫使用工作單元(已由NHibernate的ISession
實現);這是我的觀點。
我會做的是在你的項目上爲NHibernate的ISession創建一些擴展方法;它可以是這樣的:
public class ISessionExtensions
{
public static IEmployeeRepository GetEmployeeRepository(this ISession session)
{
return new EmployeeRepository(session);
}
}
public class EmployeeRepository()
{
internal EmployeeRepository(ISession s)
{
}
public IEnumerable<Employee> GetEmployeesFromDepartment(Department d)
{
...
}
}
然後,在你的代碼,你可以這樣做:
using(ISession s = _sessionFactory.OpenSession())
{
var repository = s.GetEmployeeRepository();
...
}
存儲庫模式在NHibernate之前。現在我們將存儲庫模式應用於NHibernate之上,這在大多數情況下是不必要的抽象。通用存儲庫作爲NHibernate的抽象層背後的想法是,在某些時候,你可以切換到其他持久化機制,如實體框架。真?那可能嗎?我認爲不是,因爲你會得到很多NH細節,比如緩存,讀取等等。對我來說,簡單的會話使用是可以的。
有趣。但是,如果你的應用程序具有合理的大小,那真的會產生很多對nhibernate會話的擴展。這對於可讀性來說如何? Nsesession成爲上帝階級? – Hace 2011-12-27 20:25:58
它爲什麼會產生很多擴展?即使在一個合理規模的系統中,我認爲擴展方法的數量也不會那麼大。除此之外,這並不是說這些擴展方法很複雜。我認爲他們不會讓ISession更像上一堂課。 – 2011-12-27 20:32:01
我以爲你打算爲每個存儲庫創建一個擴展,從而爲每個根集合創建一個擴展; +1表示Isession已經是上帝級了;-) – Hace 2011-12-28 07:17:57