在 Clean Architecture 中实施 Entity Framework

Implementation of Entity Framework in Clean Architecture

我正在研究 Clean Architecture 和 Entity Framework 但搞不懂为什么我们需要将 Entity (database/ Table 属性 Class) 放在 Core 项目和 DbSet- -> 基础设施中的 DbContext??对我来说,领域只关心业务实体,它可能与数据库实体/数据模型不同,最重要的是我们在核心中创建数据层的依赖关系,以及当我们 table 数据库中的列更改时发生的事情!这是否意味着我们在核心项目中更改 属性?

这背后的原因是 Entity Framework 模型 理论上 应该代表您的 Business/Domain 模型,并且与您的数据库存储策略无关。

what happened when we table column change in database

想想大多数 table 列更改背后的更改原因。

  • 如果您只是发现必须重命名该列才能让您的数据库管理员满意,您应该能够更改 mapping(位于您的基础设施项目中),并保持您的实体 class 完好无损。
  • 如果您要添加一个新的 属性,那很可能是因为基本的领域模型发生了变化:您要添加一些需要新的 属性 才能存在于您的实体中的功能.此更改可能会影响您的核心逻辑、您的 UI 和代码的其他部分,因此在核心项目中对 start 的更改是有意义的,然后需要更改在 Infrastructure 项目中以确保将列添加到数据库中。

也就是说,在实践中,您的领域模型有可能最终会在某种程度上反映您的数据库存储策略。根据您正在使用像 Entity Framework 这样的 ORM 的知识,您总是会围绕如何存储和检索数据、您希望填充哪些属性等做出设计选择。如果您决定从根本上改变您的数据存储策略(例如,使用文档存储),您的核心逻辑仍然很有可能最终会因此而改变。没有什么是完美的。

但是,如果您采用一种心智模型,其中您的实体代表您的域模型,而 DbContext 只是与您如何存储该模型相关的实现细节,您可能会更容易地做一些事情,比如从 SQL 服务器实例到 Azure SQL DB 或其他一些兼容的数据库提供程序,而无需改组核心代码。