存储库契约/接口和实现的位置

本文关键字:实现 位置 接口 契约 存储 | 更新日期: 2023-09-27 18:02:13

帮助更深的理解,有契约/接口的存储库

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

应该在域、基础设施或应用模块的什么地方声明?

存储库接口可以在这样的实体中使用吗?

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

在哪里可以毫无问题地使用它?请给出原因

存储库契约/接口和实现的位置

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

在实体中使用存储库是相当不常见或错误的,但是你的问题太一般了,无法给你任何有意义的答案。