Claude Codeで集約を設計する:集約境界の決定・不変条件の保護・集約間の参照
はじめに 「集約の境界をどこで引くか迷う」「集約Aから集約Bの内部を変更している」——DDDの集約設計で不変条件を守り、集約間の正しい参照方法を設計をClaude Codeに生成させる。 CLAUDE.mdに集約設計ルールを書く ## 集約設計ルール ### 集約境界の決定基準 - 同時に変更される必要があるエンティティをひとまとめにする - 集約は小さく保つ(大きすぎると競合が多発) - ...

Source: DEV Community
はじめに 「集約の境界をどこで引くか迷う」「集約Aから集約Bの内部を変更している」——DDDの集約設計で不変条件を守り、集約間の正しい参照方法を設計をClaude Codeに生成させる。 CLAUDE.mdに集約設計ルールを書く ## 集約設計ルール ### 集約境界の決定基準 - 同時に変更される必要があるエンティティをひとまとめにする - 集約は小さく保つ(大きすぎると競合が多発) - 集約のルート(Aggregate Root)のみが外部から直接参照される ### 不変条件 - 集約内の全エンティティの整合性を保証するビジネスルール - 不変条件の検証は集約ルートのメソッドで行う - 外部から集約の内部エンティティを直接変更しない ### 集約間の参照 - 集約間はIDのみで参照(直接の集約オブジェクト参照禁止) - 複数集約にまたがる操作はアプリケーション層(ユースケース)で調整 - 集約間の整合性は結果整合(eventual consistency) 集約設計実装の生成 集約設計のベストプラクティスを実装してください。 要件: - 集約ルートによる不変条件の保護 - 内部エンティティへのアクセス制限 - 集約間のID参照 - コレクション変更の制御 生成ファイル: src/domain/aggregates/ 生成される集約設計実装 // src/domain/aggregates/order/order.ts — 集約ルート // エラー: OrderItemは集約内部エンティティ(外部から直接操作しない) class OrderItem { private constructor( private readonly _id: string, private readonly _productId: string, // 商品集約のID参照(集約オブジェクトは持たない) private _quantity: number, private readonly _price: Money ) {} static create(productId: string, quantity: number, price: Money): OrderItem { if (quantity <= 0) throw new DomainError('Quantity