我目前正在阅读“实施领域驱动设计”一书,并在其中一个页面上显示
public class ProductBacklogItemService ... {
...
@Transactional
public void planProductBacklogItem(
String aTenantId, String aProductId,
String aSummary, String aCategory,
String aBacklogItemType, String aStoryPoints) {
Product product =
productRepository.productOfId(
new TenantId(aTenantId),
new ProductId(aProductId));
BacklogItem plannedBacklogItem =
product.planBacklogItem(
aSummary,
aCategory,
BacklogItemType.valueOf(aBacklogItemType),
StoryPoints.valueOf(aStoryPoints));
backlogItemRepository.add(plannedBacklogItem);
}
...
}
他的书也说参考:在DDD中,Aggregate应该代表交易边界。需要涉及多个聚合的交易通常表明应该改进模型,或者应该审查交易要求,或者两者兼而有之。
在上面的示例中,Product和BacklogItem在单个事务中不是2个不同的聚合吗?我很迷惑。任何人都可以分享一些想法吗?
答案 0 :(得分:1)
我认为'参与'在这种情况下,可能意味着改变了'由于Product
未被修改,因此只有一个AR受到影响。我实际上昨晚读了这篇文章,并且稍微进一步说明他确实应该只针对每笔交易操纵一个AR。所以好像会有例外。
每次交易只操纵一个AR并不是一个坏主意,通常你会发现你最终还是会得到这样的设计。
规则总会有例外,但应仔细考虑。