在我的各种项目中,我实现了命令/查询分离模式并使用 NHibernate 作为我的 ORM。
一般来说,我将我的命令和查询保存在与特定事件集相关的单独项目中,例如 UserManagement
、TagManagement
、QuestionManagement
等.
我非常喜欢将所有内容很好地划分到这些存储库中,这些存储库具有易于查找的功能。以这种方式做事当然有好处。
然而,我开始怀疑这种抽象对于基本查询的值(value),特别是考虑到 NHibernate 本身已经提供了如此强大的抽象。
在我的 MVC Controller 中考虑这个:
_nHibernateSession.Get<UserProfile>(_sessionData.UserId);
我可以将其抽象为 UserManagement
存储库中的查询,但我不确定它提供了什么值(value)。
你怎么看?您会将所有内容都保留在命令/查询范例中,还是会直接在您的 Controller 中使用 nhibernate session 来处理像这样的简单请求?
最佳答案
通常我不使用存储库,因为我认为它们在我的代码中添加了太多抽象。我更喜欢直接在服务/ Controller 层构建的 View 模型。如果我想编写单元测试,我可以针对服务或 Controller 编写它。如果你想重用一些查询条件,那么只需编写扩展方法:
public static IQueryable<User> Administrators(this IQueryable<User> users)
{
return users.Where(x => x.Role.Id == Role.Const.Admin);
}
关于这一点,我推荐这些文章: http://ayende.com/blog/3955/repository-is-the-new-singleton http://www.planetgeek.ch/2012/05/05/what-is-that-all-about-the-repository-anti-pattern/
关于c# - 使用 ORM 时的命令/查询分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849706/