实现域驱动设计书籍混乱

时间:2014-05-05 07:44:29

标签: transactions domain-driven-design ddd-repositories aggregateroot

我目前正在阅读“实施领域驱动设计”一书,并在其中一个页面上显示

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个不同的聚合吗?我很迷惑。任何人都可以分享一些想法吗?

1 个答案:

答案 0 :(得分:1)

我认为'参与'在这种情况下,可能意味着改变了'由于Product未被修改,因此只有一个AR受到影响。我实际上昨晚读了这篇文章,并且稍微进一步说明他确实应该只针对每笔交易操纵一个AR。所以好像会有例外。

每次交易只操纵一个AR并不是一个坏主意,通常你会发现你最终还是会得到这样的设计。

规则总会有例外,但应仔细考虑。