【问题标题】:Place for repository contract / interface and implementation存储库合同/接口和实现的地方
【发布时间】:2014-05-07 10:54:42
【问题描述】:

帮助理解更深,仓库有合约/接口

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

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

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

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

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

【问题讨论】:

  • 实际上你应该考虑一下为什么你想要一个域实体中的存储库的原因。存储库是否定义实体?考虑分离关注点。
  • @MikeSW 在某些情况下实体应该与集合一起使用,所以我需要知道:我可以使用存储库接口作为实体中的集合还是应该将其移动到某个服务,它应该是域、基础设施还是应用服务?
  • 如果“应该工作”表示存在需要集合的行为,那么该集合应该是方法的参数。您决定该集合是存储库还是其他服务的结果。它取决于域。

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


【解决方案1】:

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

在实体中使用存储库并不常见或错误,但您的问题过于笼统,无法为您提供任何有意义的答案。

【讨论】:

  • 有问题的评论我在谈论一些案例,他们呢?
猜你喜欢
  • 2015-02-13
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多