【发布时间】:2019-03-02 22:29:54
【问题描述】:
我有一个问题,我不确定在假设 DDD 并使用 C#/EF Core 时如何解决。
简化情况:我们有 2 个聚合 - Item 和 Warehouse。它们中的每一个都通过 ExternalId(Guid) 来标识它的身份(FE 等),这也被视为其域身份。它还具有在数据库模型中标识它的 database Id - 实体模型和 Db 模型与 EF Core 允许使用私有字段的类相同 - 只有 ExternalId 和必需的字段被公开。实体(在 DDD 和 EF Core 意义上)包含大量与对象严格耦合的业务逻辑和方法。一般来说,我遵循eShop/eShopOnContainers 示例中的模式。
项目被分配给仓库,当创建一个项目时,我们需要将仓库传递给它的构造函数。
将完整的 Warehouse 对象传递给 Item 的构造函数是否合适(也可以传递给 Item 定义的其他方法):
public Item(Warehouse warehouse,..)
或者我应该只转发数据库 ID:
public Item(long warehouseId,..)
我对此有一个问题,因为一方面我读到聚合不应该引用其他聚合,但另一方面,使用数据库数据库会将实现细节(关系数据库中的对象持久性)泄漏到不应该的域模型在我看来发生。
使用 ExternalId:
public Item(Guid warehouseId,..)
不能解决问题,因为 db 中的实际关系不基于它。
你的意见是什么?我有点疑惑。
【问题讨论】:
-
有时有两套模型会派上用场:领域模型和持久模型:)
标签: c# entity-framework-core domain-driven-design