コンテンツにスキップ

ドメイン駆動設計

はじめに

本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。


01. ドメイン駆動設計とは

オブジェクト指向分析設計から派生した分析設計の手法の一種。

オブジェクト指向分析設計のベタープラクティスを集め、より強化するために提唱された。

特に機能要件の多いアプリケーションに有効である。

必ずしもオブジェクト指向設計でドメイン駆動設計に沿う必要はなく、通常のオブジェクト指向分析設計をしても問題はない。


02. 戦略的設計の手順例

ddd_strategic_design_flow

戦略的設計では、ドメイン全体から境界づけられたコンテキストを明確にする。

  1. ドメインエキスパートと話し合い、ドメイン全体のなかからコアドメインとサブドメインを切り分ける。

  2. ドメインエキスパートの部署や業務フローの立ち位置によっては、同じ『名詞』や『動詞』であっても、意味合い/定義づけが異なる場合もある。 その場合、それぞれを異なる名前からなるユビキタス言語として定義づける。

  3. ユビキタス言語を元に、境界づけられたコンテキストを定義づける。

  4. コンテキストマップを作成し、境界づけられたコンテキスト間の関係を明らかにする。


03. 戦術的設計の手順例

戦術的設計では、境界づけられたコンテキストをアーキテクチャやデザインパターンに落とし込む。

ここでは、SUDO モデリングを採用するものとする。

  1. ドメインエキスパートと話し合いにドメインルールや振る舞いをヒアリングする。

  2. オブジェクトの具体化のためにユースケース図やオブジェクト図でオブジェクトを作成し、抽象化のためにドメインモデル図も作成する。

  3. 必要であればドメインエキスパートに再ヒアリングを行い、特にオブジェクト図とドメインモデル図を改善する。

  4. ドメインモデル図を元に、クラス図を作成する。 このとき、モデルをエンティティや値オブジェクトに切り分けるようにする。

  5. アーキテクチャ (レイヤード型、ヘキサゴナル型、オニオン型、クリーンアーキテクチャ) を決め、クラス図を元にドメイン層を実装する。

  6. 運用後に問題が発生した場合、特にオブジェクト図とドメインモデル図を修正する。 場合によっては、デザインパターンに切り分ける。