【どめいんくどうせっけい】
ドメイン駆動設計(DDD) とは?
💡 「業務の言葉」でコードを書く
📌 このページのポイント
ユビキタス言語って何?
開発者とビジネス担当者が同じ用語を使うこと。ビジネス側が「注文」と呼ぶものをコードでもOrderクラスにする。「承認」はApproval、「請求」はInvoice。コード内の変数名やクラス名が業務用語と一致していれば、仕様の認識齟齬が減る。「内部的にはdataItemだけど業務的には注文」みたいなのはNGだよ
同じ言葉でも文脈によって意味が違うことがある。「商品」は販売部門では「売り物」、物流部門では「配送対象物」、会計部門では「売上項目」。これらを1つのProductクラスにまとめると複雑化する。部門ごとに境界(コンテキスト)を定めて、各コンテキスト内で最適なモデルを設計するんだよ
境界づけられたコンテキストがマイクロサービスの分割単位の有力な指針になる。販売コンテキスト→販売サービス、物流コンテキスト→物流サービス。技術的な分割(DB層、API層)ではなく、ビジネスドメインで分割するのがDDDの考え方。これにより各サービスが自律的に開発・デプロイできるようになるよ
DDDの導入が難しいと聞くけど?
📖 おまけ:英語の意味
「Domain-Driven Design」 = ドメイン駆動設計
💬 Domain(領域)に駆動(Driven)される設計。Eric Evansが2003年に書籍で体系化したよ