存储库模式,UoW模式,简单的NHibernate Session

时间:2011-12-27 14:32:24

标签: c# nhibernate design-patterns repository-pattern unit-of-work

关于Repository patternUoW pattern的使用,有很多讨论。我完全理解使用Repository pattern的时间和原因。 我只想说我有几个聚合根。下一步是什么?我更喜欢什么模式/实现?使用比普通NHibernate Session更复杂的解决方案的原因是什么?

谢谢!

2 个答案:

答案 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细节,如缓存,提取等。对我来说,简单的会话使用是可以的。

Here ayende talks about that for a while
And more...