存储库合同/接口和实现的位置

时间:2014-05-07 10:54:42

标签: c# interface persistence domain-driven-design ddd-repositories

帮助更深入地了解存储库的合同/接口

public interface ICoolRepository
{
    Entity GetById(int id);
}

应该在域名,infrastracture或app模块中宣布?

可以在类似的实体中使用存储库接口:

public class User
{
...
  public DoStuff(ICoolRepository repo)
  {
    //here goes using cool repository
  }
...
}

哪里可以使用没问题?请给出理由

1 个答案:

答案 0 :(得分:3)

接口应该在域模型中定义,因为它是泛在语言的一部分(它表示,什么是聚合,什么不是,它表达了聚合应该被寻找的方式,直接或间接地与某些相关)用例)。存储库的实现应该包含在基础结构中,因为它包含DAL / ORM引用。

在实体中使用存储库是相当罕见或错误的,但您的问题过于通用,无法给出任何有意义的答案。