【发布时间】:2018-11-07 17:56:55
【问题描述】:
我想使用 DDD 方法来创建我的域模型。我明白,在有界上下文中,只有该上下文所需的数据才应该可用,并使用该上下文的普遍语言。
假设我在命名空间BuyerContext 中有一个Buyer 类,在命名空间SellerContext 中有一个Seller 类。最后,两个域类都应该映射到数据库的Users 表。 我为此使用 EF Core 2.1。
一个域类可能具有不属于另一个域类的字段/属性,例如Buyer.CreditCardNumber 或Seller.Rating。
为了利用 DDD 方法,我为每个有界上下文创建了两个 dbcontext,例如 BuyerDbContext 和 SellerDbContext,并将 EF 配置为使用相同的 Users 表,但仅映射有界上下文所需的那些字段。我知道该怎么做,我还阅读了有关为每个 dbcontext 创建一个项目的信息。
我不知道的是,我需要做什么,才能在这个设置中使用迁移,所以当数据库将被初始化或迁移时,它会创建一个 User 带有字段 @ 的表987654332@(在BuyerDbContext中配置)和一个字段Rating(在SellerDbContext中配置)。
我找到的唯一解决方案是创建另一个模型,该模型代表具有自己的 dbcontext(如 EntitiesDbContext)的完整数据库,并使用该上下文进行迁移。所以我最终得到了一个类User,其中有两个字段CreditCardNumber 和Rating。我读到我可能需要在其他 dbcontexts 上禁用某种“初始化”。
这是正确的方法吗?
【问题讨论】:
-
您应该问自己的第一件事是:买家和卖家真的是不同的有界上下文吗?通常我会说,因为它们通常属于一起。有界上下文通常类似于“销售”或“营销”、“物流”。在不了解很多上下文和领域的情况下,人们很难给你任何答案。买方和卖方听起来就像您域中的实体或聚合,而不需要有界上下文
-
补充@Tseng 的评论,如果买家和卖家实际上处于不同的有界上下文中,那么它们应该存储在不同的数据库(或模式,或至少表)中。有界上下文之间应该有最小的耦合,并且共享一个表完全违背了在 BC 中拆分域的目的。另一方面,正如 Tseng 所提到的,买家和卖家不太可能属于不同的 BC,因为它们在许多情况下都是必要的:买家从卖家那里购买商品,卖家将商品交付给买家,卖家将促销活动发送给买家等
标签: entity-framework domain-driven-design