【发布时间】:2019-03-16 23:49:44
【问题描述】:
我对 DDD 很陌生,但我喜欢设计如何在您的代码中强制执行结构(只要您遵守这些原则)。我有一个难题,我认为为了解决问题,我需要牺牲设计,我不想这样做。但首先,我想指出,由于我的无知,我可能从一开始就错误地设计了这个。
我有一个应用程序,它的实体包含数据库术语中的 BLOB。我们称这个实体为child。因此child 的大小很大,因为它包含一个 BLOB。现在,child 可以从它的 AR 身份中找到,我们称之为 AR parent。还有一个更高的级别(grandparent),但不需要此级别,因为child 包含要传递给用户的所需数据,parent 可以从用户的请求中找到(一些复杂的搜索是但是,在应用程序端检索父级是必需的)。
现在,parent 包含许多child(一对多关系),但我每个事务只需要一个child,因此查询每个请求的parent 和child 的整个结果是绝对不需要。为每个事务执行此查询也会非常低效,因为我要求从数据库中获取许多我什至没有在每个事务中使用的附加数据。例如,将parent 保留在本地,然后对单个child 执行查询,效率会成倍提高。
我的 SLA 也很严格,因此检索 child 需要非常快。我目前的蛮力方法是查询parent,仅检索child 之一,并将结果提供给用户。我正在寻找一种方法,我可以在本地拥有parent,而没有child 的列表,然后当请求到来时,我查询一个child。这将非常快速和高效,因为我只检索我需要的东西。但是,这会违反 DDD 的规则,因为 child 在技术上仅由 parent 的身份引用,而不是它自己的 AR。
【问题讨论】:
-
您可以尝试延迟加载 blob,同时保留子集合。但是,什么规则迫使您将孩子集合到
parent中?为什么child不能是它自己的聚合?另外,请记住您的对象模型旨在处理命令,而不是查询。如果您只获取显示忘记您的对象并直接转到数据库。
标签: java jpa jakarta-ee domain-driven-design ddd-repositories