【でぃーでぃーでぃー】
DDD(ドメイン駆動設計) とは?
最終更新:
💡 業務の言葉とルールを、モデルに育てる
業務の知識やルールを中心に、関係者とモデルを育てながらソフトウェアを設計する考え方。言葉の意味が通じる範囲を明確にし、会話・モデル・実装を結び付ける。
📌 このページのポイント
DDDって、何から考えるの?
たとえば注文を扱うなら、「いつ注文が成立するか」「取消できるのはいつか」といった業務の意味やルールから考えるよ。業務の専門家と開発者が一緒に、ソフトウェアで扱うモデルを作り、理解が深まれば見直すんだ。
業務の言葉を、クラス名にするだけ?
命名は一部だよ。たとえば「確定した注文はこう扱う」と意味や振る舞いもそろえる。その共通の言葉をユビキタス言語というんだ。会話・モデル・コードが食い違っていないか、日々確かめることが大切だね。
会社全体で、一つの用語集を使えばいい?
同じ「商品」でも、注文管理では購入時の価格、在庫管理では保管場所や数量に注目するかもしれない。意味やモデルが一貫する範囲を、境界づけられたコンテキストとして明示するよ。境界の間でどう情報をやり取りするかも設計するんだ。
集約とリポジトリも、必要なの?
DDDにしたら、マイクロサービスになる?
別々の考え方だよ。コンテキストは言葉とモデルの境界で、必ず一つの独立サービスにする決まりではない。戦略的な境界の設計と、モデル内の戦術的なパターンを組み合わせる。単純なCRUDにまで複雑な実装を足す必要はなく、目的とコストに合わせよう。
まとめ:ざっくりこれだけ覚えればOK!
「DDD」って出てきたら「業務の言葉とルールを中心に、モデルとソフトウェアを育てる設計の考え方」と思えばだいたいOK!
📖 おまけ:英語の意味
「Domain-Driven Design」 = ドメイン駆動設計
💬 domainは対象とする業務の領域や知識。技術の部品だけから出発するのではなく、業務の理解に導かれて設計する、という意味だよ。