CTS-KB

DDD

でぃーでぃーでぃー

Domain-Driven Design ドメイン駆動設計 DDD ドメイン駆動設計
#設計手法 #ドメイン駆動設計 #DDD #オブジェクト指向

Domain-Driven Design — ドメイン(業務)の言葉と構造をそのままコードに反映させる設計手法。Eric Evans が 2003 年の同名書籍で体系化した。

概要

DDD の核は 「コードとビジネス用語を同じ語彙で揃える」 こと。エンジニアが業務担当者と「ユビキタス言語」で会話し、その言葉どおりにクラス名・メソッド名・モジュール名を付ける。これによって仕様変更とコード変更が一対一で対応し、AI 駆動開発でも「何を作るか」を伝えるコストが大きく下がる。

戦略的設計と戦術的設計

DDD は 2 層に分かれる。

何を扱うか主要概念
戦略的設計システムをどう分割するかBounded Context / コンテキストマップ / ユビキタス言語
戦術的設計コンテキスト内でどう実装するかエンティティ / 値オブジェクト / 集約 / リポジトリ / ドメインサービス / ドメインイベント

戦術だけ真似して戦略を欠くと「DDD 風 CRUD」になりやすい。先に Bounded Context を切ることが効果の半分以上を占める。

主要な戦術パターン

パターン役割
エンティティ同一性(ID)で区別される、ライフサイクルを持つオブジェクト
値オブジェクト値そのもので等価判定する、不変の小さな型(Money, Email など)
集約強い不変条件で結ばれたエンティティ群と、その境界
リポジトリ集約を永続化から切り離して扱う抽象
ドメインサービスエンティティ・値オブジェクトに置きにくいドメインロジック
ドメインイベント「ドメインで起きた出来事」を一級のオブジェクトとして表現

なぜ AI 駆動開発で重要か

  • ユビキタス言語が揃っていれば、AI への指示が短く正確になる(「Order 集約に割引を追加して」で意図が通る)
  • 集約・リポジトリの境界が明確だと、AI 生成コードの影響範囲がレビュー可能なサイズに収まる
  • ドメインイベントが整理されていれば、新しい業務要求に対する追加点が予測しやすい

レガシーシステムとの関係

COBOLRPG の業務プログラムは、DDD 的視点で見ると「業務ドメインの語彙が手続きに散在している」状態。モダナイゼーション時には、まずサービスプログラム(*SRVPGM)単位で集約候補を抽出するのが現実的な第一歩になる。

関連記事

関連用語