DDD声明您应该只能通过其聚合根访问实体.所以说,例如,你有一个聚合的根X,可能有很多孩子Y实体.现在,对于某些情况,您一次只关心这些Y个实体的一个子集(也许您正在一个分页列表中显示它们).
实现存储库是否可行,因此在这种情况下,它返回不完整的聚合? IE浏览器.一个X对象谁的Ys集合只包含我们感兴趣的Y实例,而不是全部?这可以例如引起X上的方法,其执行涉及Y的一些计算不如预期的那样表现.
这可能意味着有关的Y实体应被视为一个总体根源?
我目前的想法(在C#中)是利用LINQ的延迟执行,所以我的X对象有一个IQueryable来表示它与Y的关系.这样,我可以透明的懒惰加载过滤…但让它工作使用ORM(Linq to sql在我的情况下)可能有点棘手.
任何其他聪明的想法?
我认为一个具有很多子实体的聚合根是一个代码气味,或者如果你愿意的话,会有DDD的气味. :-)一般来说我看两个选项.
>将您的聚合分割成许多较小的聚合.这意味着我的原始设计不是最佳的,我需要识别一些新的实体.>将您的域拆分成多个有界的上下文.这意味着有一组场景使用聚合中实体的公共子集,而还有其他使用不同子集的情景集.