タグ: DDD

tagsに1件の記事があります

DDDの集約設計:不変条件がトランザクションより優先される理由

DDD(ドメイン駆動設計)において、集約はシステムの重要な部分です。多くの場合、集約について議論するときにトランザクションが強調されますが、実際には「不変条件」の方が重要です。

不変条件とは

不変条件とは、オブジェクトが常に満たすべき条件や性質のことです。これは「変更不可能なオブジェクト(immutable)」とは異なり、オブジェクトの状態が変わる際にも必ず守られるべきルール(invariant)です。 例えば、銀行口座の残高が負にならないことなどです。

集約と不変条件

集約は、この不変条件を保つように設計されるべきです。TypeScriptを使う場合、zodrefineを使用して不変条件をチェックできます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import { z } from 'zod';

// BankAccountのスキーマを定義
const BankAccountSchema = z.object({
  id: z.string(),
  balance: z.number(),
}).refine(data => data.balance >= 0, {
  message: "Balance must be non-negative",
});

// BankAccount型を定義
type BankAccount = z.infer<typeof BankAccountSchema>;

トランザクションと不変条件

不変条件を常に保つことが約束された集約単位でトランザクションを行えば、不変条件は常に保たれる。