【问题标题】:In DDD with Entity Framework where should the Context Interface live?在带有实体框架的 DDD 中,上下文接口应该放在哪里?
【发布时间】:2011-08-17 19:49:10
【问题描述】:

我在我的 DDD 应用程序中使用实体框架,其中有域、基础设施和 UI 层。

我的上下文界面在这里:

public interface IDbContext
{
    IDbSet<TEntity> Set<TEntity>() where TEntity : class;
    DbEntityEntry Entry<TEntity>(TEntity entity) where TEntity : class;

    void SaveChanges();
}

我的上下文接口实际上存在于域层中。

你怎么看,我的上下文依赖于实体框架,因为我的基础存储库和我的整个应用程序都使用它。

我应该把这个接口放在哪里?将其移至 Infra?我想将我的领域与任何技术隔离开来。

【问题讨论】:

    标签: .net entity-framework domain-driven-design


    【解决方案1】:

    您应该将界面移动到 ifra 层。此外,您应确保此接口或实现该接口的任何类型不直接用于任何其他层,因为一旦您在其他地方访问DbSetDbEntityEntry,您就有了依赖关系。

    【讨论】:

    • 为什么将接口移动到基础层?是否有 DDD 解释或其他动机?
    • 接口依赖于实体框架,您提到您希望将域与任何技术隔离。隔离 = 不依赖技术。
    • 是的,像 ORM 上下文/会话、数据库连接等特性属于基础设施。
    【解决方案2】:

    我认为您应该忘记直接使用 IDbContext 接口。恕我直言,更好的解决方案是在您的域上定义存储库接口,而不引用实体框架,并且在基础架构层中,您将定义该存储库的实现。

    对模型的任何查询都将通过存储库完成,而存储库又返回一个模型或模型的 IEnumrable。

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多