【どめいんくどうせっけい】

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

最終更新:
💡 「業務の言葉」でコードを書く

ビジネスドメイン(業務領域)の知識を中心にソフトウェアを設計する手法。Eric Evansが提唱。

📌 このページのポイント
業務の意味に合うモデルを作る 販売のコンテキスト 物流のコンテキスト 商品 価格・説明 売るためのモデル 注文の言葉・ルール 商品 重さ・配送条件 届けるためのモデル 出荷の言葉・ルール モデル間の関係・対応を明示 言葉の意味を共有する範囲を定める 境界と部門・サービスは一対一とは限らない
同じ「商品」を販売と物流で違うモデルにする例。線は関係を表し、通信や処理順序を示さない。コンテキストマップはこうした境界や関係を描くもので、実行時の中継装置ではない。
ひよこ ひよこ
ペンギン先生 ペンギン先生
同じコンテキストの中で、業務の専門家と開発者が意味を共有する言葉だよ。たとえば「注文」を会話・図・コードで同じ意味にそろえる。単にOrderと命名するだけでなく、注文の状態や成立条件も一緒に理解し、モデルに反映するんだ。
ペンギン先生 ペンギン先生
あるモデルが通用する範囲だよ。「商品」が販売では価格や説明、物流では重さや配送条件を中心に表される、という例で考えると分かりやすい。境界は部門ごとに機械的に引くものではなく、言葉の意味やモデル、チームの仕事などに合わせて定めるんだ。
ひよこ ひよこ
DDDとマイクロサービスの関係は?
ペンギン先生 ペンギン先生
コンテキストはサービスの境界を考える手掛かりになるけれど、必ず1つのコンテキストを1つのサービスにする決まりではないよ。1つのアプリの中にも複数のモデルがあり得る。コンテキストマップはモデルやチーム間の関係を示すもので、実行時に通信を中継する装置ではないんだ。
ひよこ ひよこ
DDDはパターンを全部使うことなの?
ペンギン先生 ペンギン先生
目的は業務の知識をソフトウェアに生かすことだよ。モデルや言葉の適用範囲を考える戦略的な設計と、エンティティなどを使う戦術的な設計の両方を扱う。業務の人と話してモデルを改善し、必要なパターンを選ぶ。名前だけそろえれば完成するわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DDD」って出てきたら「業務ドメインの知識を中心にソフトウェアを設計する手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Domain-Driven Design」 = ドメイン駆動設計
💬 Domain(領域)に駆動(Driven)される設計。Eric Evansが2003年に書籍で体系化したよ

参考資料

← 用語集にもどる