【でぃーでぃーでぃー】

DDD(ドメイン駆動設計) とは?

最終更新:
💡 業務の言葉とルールを、モデルに育てる

業務の知識やルールを中心に、関係者とモデルを育てながらソフトウェアを設計する考え方。言葉の意味が通じる範囲を明確にし、会話・モデル・実装を結び付ける。

📌 このページのポイント
DDD:言葉の意味が通じる境界業務の専門家 + 開発者話し合い、モデルとコードを育てる注文管理の境界商品購入時の価格注文した数量在庫管理の境界商品保管場所在庫の数量同じ言葉でも、境界ごとに意味を決めるよ
「商品」に注目するモデルの比較例。共通語は各境界の中でそろえ、境界間の連携も設計する。
ひよこ ひよこ
DDDって、何から考えるの?
ペンギン先生 ペンギン先生
たとえば注文を扱うなら、「いつ注文が成立するか」「取消できるのはいつか」といった業務の意味やルールから考えるよ。業務の専門家と開発者が一緒に、ソフトウェアで扱うモデルを作り、理解が深まれば見直すんだ。
ひよこ ひよこ
業務の言葉を、クラス名にするだけ?
ペンギン先生 ペンギン先生
命名は一部だよ。たとえば「確定した注文はこう扱う」と意味や振る舞いもそろえる。その共通の言葉をユビキタス言語というんだ。会話・モデル・コードが食い違っていないか、日々確かめることが大切だね。
ひよこ ひよこ
会社全体で、一つの用語集を使えばいい?
ペンギン先生 ペンギン先生
同じ「商品」でも、注文管理では購入時の価格、在庫管理では保管場所や数量に注目するかもしれない。意味やモデルが一貫する範囲を、境界づけられたコンテキストとして明示するよ。境界の間でどう情報をやり取りするかも設計するんだ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
エンティティは同一性で追跡するもの。注文番号で同じ注文を見分けるのが一例だよ。値オブジェクトは、内容の値で扱うもの。たとえば金額と通貨の組を表せる。住所も値として扱う場合があるけれど、業務によっては同一性が重要なエンティティになるんだ。
ひよこ ひよこ
集約とリポジトリも、必要なの?
ペンギン先生 ペンギン先生
集約は整合性を守る単位としてまとめたモデルで、集約ルートを通して変更するよ。たとえば注文とその明細を扱う場合、数量などのルールを守る。リポジトリは集約を取得・保存する窓口のパターンで、Gitのリポジトリとは別だね。全部を機械的に使うのではなく、業務の複雑さに合わせて選ぶんだ。
ひよこ ひよこ
DDDにしたら、マイクロサービスになる?
ペンギン先生 ペンギン先生
別々の考え方だよ。コンテキストは言葉とモデルの境界で、必ず一つの独立サービスにする決まりではない。戦略的な境界の設計と、モデル内の戦術的なパターンを組み合わせる。単純なCRUDにまで複雑な実装を足す必要はなく、目的とコストに合わせよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DDD」って出てきたら「業務の言葉とルールを中心に、モデルとソフトウェアを育てる設計の考え方」と思えばだいたいOK!
📖 おまけ:英語の意味
「Domain-Driven Design」 = ドメイン駆動設計
💬 domainは対象とする業務の領域や知識。技術の部品だけから出発するのではなく、業務の理解に導かれて設計する、という意味だよ。

参考資料

← 用語集にもどる