关于Repository pattern
,UoW pattern
的使用,有很多讨论。我完全理解使用Repository pattern
的时间和原因。
我只想说我有几个聚合根。下一步是什么?我更喜欢什么模式/实现?使用比普通NHibernate Session更复杂的解决方案的原因是什么?
谢谢!
答案 0 :(得分:5)
存储库模式是一种抽象,它不是不必要的。它只允许您预定义可在整个系统中多次使用的某些查询,并且它提高了可读性。
存储库使用工作单元(已经由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();
...
}
答案 1 :(得分:3)
存储库模式在NHibernate之前。现在我们在NHibernate之上应用存储库模式,这在大多数情况下是不必要的抽象。通用存储库作为NHibernate上的抽象层背后的想法是,在某些时候,您可以切换到其他持久性机制,如实体框架。真?那可能吗?我想不是,因为你最终会得到如此多的NH细节,如缓存,提取等。对我来说,简单的会话使用是可以的。