首页 > 解决方案 > 根据 DDD,我需要额外的存储库和模型吗

问题描述

根据我拥有DDD的每个。举个例子:aggregaterepository

Client (model aggregate) > ClientRepository
Visit  (model aggregate)  > VisitRepository

现在,我在数据库中有关联表连接客户端和访问,因为客户端可能有很多访问。

问题是:我应该创建像这样的分离模型:ClientVisit这也将是aggregate

public class ClientVisit
{
     int clientId;
     int visitId;   
}

还有 s 存储库ClientVisitRepository,例如可以引用/使用ClientRepositoryVisitRepository.

或者是否足以坚持例如CLientRepository并从那里获取数据而无需额外模型和存储库

对帖子的修改:

而不是Visit(错误的例子) - 让我们替换为Car因此每个都client可以拥有many cars. 我们也将是独一无二的transactionNumber

Client (model aggregate)  > ClientRepository
Car    (model aggregate)  > CarRepository

然后我应该创建聚合,例如:

public class ClientCar
{
    int clientId;
    int visitId;  
    int transactionNumber; 
}

ClientCarRepository

标签: c#domain-driven-design

解决方案


Repository,在领域驱动设计的意义上,是一种生命周期管理模式。参见“蓝皮书”第 6 章。

它的目的是从我们的应用程序代码中分离出我们用来存储和检索聚合根的策略。这很重要,因为聚合根是我们的应用程序代码直接与之对话的域代码的唯一部分。

由此,您不需要客户汽车关系的存储库,除非它是其自己的根聚合

弄清楚这种关系是否应该在它自己的聚合中是一个领域分析的问题——你将不得不深入到你的特定领域来找出答案。对于像汽车租赁域这样的东西,我你会希望这种关系以及与其生命周期相关的信息与汽车或客户分开聚合。但在我与领域专家一起处理过一些边缘案例之前,我不会对这个猜测充满信心。


推荐阅读