1

我正在讀「實施領域驅動設計」一書,並在頁面上的一個顯示實施領域驅動設計圖書混亂

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總結應該代表事務邊界。需要多個集合參與的交易往往表明要麼對模型進行細化,要麼對交易要求進行審查,或者對兩者都進行審查。

在上述例子中,將不產品和BacklogItem是在單個事務中2個不同的聚集體?我很困惑。誰能分享一些想法?

回答

1

我認爲這是參與「在這種情況下可能意味着「改變」,由於Product只有一個AR受到影響,不會被修改。我實際上昨天晚上讀了這一點,而且他還提到了一點,那就是應該真正的目標是每個交易只操縱一個AR。所以看起來好像會有例外。

這不是一個壞主意,只操縱每筆交易單AR,通常你會發現,你最終有這樣的設計呢。

總有一些將是例外的規則,但這些應慎重考慮。

+0

我認爲產品中含有backlogitem的集合,於是兩人的AR受到影響,無論是產品和BacklogItem。 – Joshscorp

+1

不過,這不是教條而是指導。當您創建一個聚合時,通常由另一個聚合來完成。 http://www.udidahan.com/2009/06/29/dont-create-aggregate-roots/ –

+0

如果我沒有記錯,這是最初的'大'AR分裂成不同的AR的地方。所以最初'產品'包含集合,但它們不應該在'產品'上,因爲存儲庫現在代表該集合。 'Product'現在只包含工廠方法,可能會正確創建關聯。以下是Udi Dahan發表的一篇文章:http://www.udidahan.com/2009/06/29/dont-create-aggregate-roots/ –