c# - 根据 DDD,我需要额外的存储库和模型吗
问题描述
根据我拥有DDD
的每个。举个例子:aggregate
repository
Client (model aggregate) > ClientRepository
Visit (model aggregate) > VisitRepository
现在,我在数据库中有关联表连接客户端和访问,因为客户端可能有很多访问。
问题是:我应该创建像这样的分离模型:ClientVisit
这也将是aggregate
:
public class ClientVisit
{
int clientId;
int visitId;
}
还有 s 存储库ClientVisitRepository
,例如可以引用/使用ClientRepository
和VisitRepository
.
或者是否足以坚持例如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
?
解决方案
Repository
,在领域驱动设计的意义上,是一种生命周期管理模式。参见“蓝皮书”第 6 章。
它的目的是从我们的应用程序代码中分离出我们用来存储和检索聚合根的策略。这很重要,因为聚合根是我们的应用程序代码直接与之对话的域代码的唯一部分。
由此,您不需要客户汽车关系的存储库,除非它是其自己的根聚合。
弄清楚这种关系是否应该在它自己的聚合中是一个领域分析的问题——你将不得不深入到你的特定领域来找出答案。对于像汽车租赁域这样的东西,我猜你会希望这种关系以及与其生命周期相关的信息与汽车或客户分开聚合。但在我与领域专家一起处理过一些边缘案例之前,我不会对这个猜测充满信心。
推荐阅读
- html - 如何在Angular 8中的选择中将值默认为“选择问题”?
- excel - 使用 Excel 宏在一张表中创建具有特定范围的 PDF
- python-3.x - 从测试内部访问 pytest capsys
- php - 如何使用我的 react native apk 与不同的 wifi ip?
- python - 对于这个问题,我被困在一行返回语句中
- java - System.out.print() 中的 java 中的“+”连接操作是否会消耗内存?
- c - 用 C 设置 ROS Melodic
- javascript - 需要帮助编码夜间模式 wordpress webiste,它将根据晚上 7 点到早上 7 点自动触发(如 instagram),但对于我的网站
- flutter - 有没有办法在 Flutter 中控制系统音乐?
- oracle - Oracle ATP 钱包连接