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

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

💡 「業務の言葉」でコードを書く
📌 このページのポイント
ドメイン駆動設計の基本構造 注文コンテキスト エンティティ 注文 id, 日付, 状態 合計金額() 注文明細 商品, 数量 小計() 値オブジェクト 金額 通貨, 額 住所 都道府県, 市区町村 ドメインサービス: 注文処理 コンテ キスト マップ API イベント 在庫コンテキスト エンティティ 商品 id, 名前, SKU 在庫確認() 倉庫 場所, 容量 空き確認() 値オブジェクト 数量 値, 単位 SKUコード カテゴリ-番号 ドメインサービス: 在庫管理 各境界づけられたコンテキストは独立したドメインモデルを持ち、 コンテキストマップを通じて明確なインタフェースで連携する
ドメイン駆動設計の基本構造
ひよこ ひよこ

ユビキタス言語って何?

ペンギン先生 ペンギン先生

開発者とビジネス担当者が同じ用語を使うこと。ビジネス側が「注文」と呼ぶものをコードでもOrderクラスにする。「承認」はApproval、「請求」はInvoice。コード内の変数名やクラス名が業務用語と一致していれば、仕様の認識齟齬が減る。「内部的にはdataItemだけど業務的には注文」みたいなのはNGだよ

ペンギン先生 ペンギン先生

同じ言葉でも文脈によって意味が違うことがある。「商品」は販売部門では「売り物」、物流部門では「配送対象物」、会計部門では「売上項目」。これらを1つのProductクラスにまとめると複雑化する。部門ごとに境界(コンテキスト)を定めて、各コンテキスト内で最適なモデルを設計するんだよ

ひよこ ひよこ

DDDマイクロサービスの関係は?

ペンギン先生 ペンギン先生

境界づけられたコンテキストマイクロサービスの分割単位の有力な指針になる。販売コンテキスト→販売サービス、物流コンテキスト→物流サービス。技術的な分割(DB層、API層)ではなく、ビジネスドメインで分割するのがDDDの考え方。これにより各サービスが自律的に開発・デプロイできるようになるよ

ひよこ ひよこ

DDDの導入が難しいと聞くけど?

ペンギン先生 ペンギン先生

DDDの戦術的パターン(エンティティ、値オブジェクト、集約など)をいきなり全部適用しようとすると挫折しやすい。まずは戦略的パターン(ユビキタス言語境界づけられたコンテキスト)から始めるのがおすすめ。「業務用語でコードを書く」「チームの言葉を統一する」だけでもDDDの恩恵は大きいよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
DDD」って出てきたら「業務ドメインの知識を中心にソフトウェアを設計する手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Domain-Driven Design」 = ドメイン駆動設計
💬 Domain(領域)に駆動(Driven)される設計。Eric Evansが2003年に書籍で体系化したよ
← 用語集にもどる