相关疑难解决方法(0)

DDD:聚合中的延迟加载

这几天我一直在学习 DDD,并努力理解聚合根的一些核心概念。也许有人可以给我推动正确的方向,并详细说明在这种情况下的最佳实践:

为了使这个示例不那么复杂,假设我们有一个包含两个实体的域:餐厅和营业时间。餐厅被定义为聚合根。

文本

根据我在所有在线示例中的理解(如果我错了,请纠正我),每次我需要聚合根的实例时,聚合根都会急切地加载所有子实体。因此,每当我想调用餐厅的方法时,都会加载所有营业时间(无论是否使用)。

在此示例中,我想验证当向该餐厅添加新时间时,营业时间不存在交集。在这种情况下,每隔一个开放时间的急切加载是有意义的,因为我需要将它们与现有的进行比较。

但是:这是一种限制,因为我知道每次我想添加另一个集合(比如餐厅图像)时,SQL 负载会越来越重,尽管大多数方法只需要其中一个集合。

我可以想到两种可能的解决方案:

延迟加载

通过实体框架属性代理延迟加载打开时间/子实体。因此,聚合根可以存在而无需急切加载它们,但只要需要它们就可以访问它们。然而,在我到处寻找答案时,我都认为聚合根中的延迟加载被认为是不好的做法。也许有人可以解释原因。

较小的聚合根

当然,我可以将开放时间本身定义为聚合根,但随后我需要将业务逻辑(在本例中为交叉点验证)置于模型之外。

在上面的所有示例中,我仅讨论命令端(而不是查询或序列化)。

也许我缺少一些基本的想法。在这个例子中应该如何组织聚合根以及为什么延迟加载被认为是不好的做法?

编辑 不知道为什么这个问题因为“基于意见”而被关闭。我要求最佳实践以及为什么延迟加载不在这种情况下。

c# domain-driven-design entity-framework-core

5
推荐指数
2
解决办法
5487
查看次数