orm - NHibernate 的 DDD 存储库模式

标签 orm repository domain-driven-design

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




10年前关闭。




我很困惑。这是 Ayende Rahien Repository is the new singleton 的博客条目.

我相信存储库应该只执行 CRUD 操作而不是额外的查询,否则你最终会在你的存储库中使用这些方法。

  • 查找客户(id)
  • FindCustomerWithAddresses(id)
  • FindCustomerWith..

  • 所以我的问题是,在哪里(在哪一层)进行查询以检索实体?

    最佳答案

    可以编写具有默认 CRUD 操作的存储库。例如:

    public interface IRepository<TEntity>
    {
       TEntity FindByIdentity(object identity);
       TEntity FindBy(Expression<Func<TEntity, bool>> specification);
       IList<TEntity> FindAll();
       IList<TEntity> FindAllBy(Expression<Func<TEntity, bool>> specification);
       TEntity Save(TEntity saveable);
       void Delete(TEntity deletable);
    }
    

    Expression> 基本上是规范,查询可以这样封装。如果我们有那种存储库,那么我们就不需要编写很多特定的存储库。

    替代路径是创建 Query 对象。我们可以将该查询的接口(interface)添加到核心/业务逻辑层,并将实现添加到服务/数据层。这样我们就可以很好地命名查询,例如 AllPreferredCustomersQuery。它与规范非常相似,但规范不使用基础设施,因此我们可以将其添加到核心/业务逻辑层。查询对象更具可配置性(例如,可以添加限制、获取策略、连接等)

    关于orm - NHibernate 的 DDD 存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666477/

    相关文章:

    c# - LINQ2SQL 实体构造函数约束

    sql - Entity Framework 、通用存储库模式和奇怪的 SQL 生成

    Eclipse 导入 > Git 选项不可用

    validation - CQRS DDD : How to validate products existence before adding them to order?

    domain-driven-design - DDD-强制具有小的聚合根的不变量

    python - 我如何使用 Django ORM 执行这个复杂的 SQL 查询? (带连接的子查询)

    php - Eloquent 最后插入Id

    orm - F# 类型提供程序是否会为实现对象关系映射提供良好的基础?

    java - 将一个 Maven 项目添加到另一个 Maven 项目中导致无法解析依赖项错误

    domain-driven-design - 事件溯源系统是否需要事务发件箱?