cubenoy22.com

エヴァンスDDD第1部導入

Cover Image for エヴァンスDDD第1部導入

第一部 ドメインモデルを機能させる

18世紀の中国の地図

  • 自国が中心で他国はおざなりに表現された世界地図 - 世界についてのモデル
  • 国内に意識がむいていた当時の中国社会にふさわしいものだが、外国人には役に立たなかっただろう(もちろん現在の中国でも)

モデル

  • 現実の何らかの側面や興味の対象となる概念を表す
  • 関連する側面を抽象化・それ以外の詳細を無視すること(=簡素化)による一つの解釈
  • 選び抜かれてシンプルにされ、意図的に組み立てられた知識の表現形式
    • 適切なモデルは情報の持つ意味を明らかにし、問題に集中させる

ドメインモデル

  • 特定の図ではなく図が伝えようとしている考え方
  • ドメインエキスパートの頭の中にある知識が厳密に構成され、選び抜かれて抽象化されたもの
  • 図を用いてモデルを表現 - 慎重に作成されたコードや自然言語の文章でも可能

ドメインモデリング

  • モデルを写実的にではなく、例えば映画制作のようにある目的にしたがって、現実の概要を表現している
    • ドキュメンタリー映画でも未編集の実生活を見せたりしない
  • 実用のために特定のモデルを選択する

ドメイン駆動設計におけるモデルの有用性

model-domain-code

DDDでは次の基本的用法によって、どのモデルを選択するかが決定される:

  1. モデルと設計の核心が相互に形成し合う
    • モデルと実装が密接に結びつくことで、モデルに対する分析がプログラムにも適用される
    • モデルと実装の結びつきは保守・継続的開発に有効で、モデルの理解でコードを解釈できるようになる
    • 💭(コードの設計とドメインで考え方や捉え方を分けず、自然な形で実現されていることが大事)
  2. モデルはチームメンバ全員が使用する言語の基盤である
    • 用語が統一されてあれば開発者が通訳なしでドメインエキスパートとコミュニケーションできる
  3. モデルとは、蒸留された知識である
    • モデルは最も関心ある要素を区別するための、チーム内で取り決めた方法
    • ドメイン(関心事)についてどう考えることにしたか が1つのモデルによって捉えられる

ソフトウエアの核心

  • 核心は「ドメインに関係した問題をユーザのために解決する能力」
    • ドメインが複雑だと関係した問題の解決が難しくなる
  • たいていのプロジェクトではドメインに関係した問題の解決が重要視されない、技術思考の開発者は自分の専門スキルを発揮できる定量化可能な問題を楽しむ
  • ドメインに関する作業は面倒だし開発者としての能力向上にならないように見えてしまう、技術的な才能のある開発者は技術によってドメインを解決しようとする
    • ソフトウェアの核心にある複雑さに真正面から立ち向かうべき!

複雑さを一刀両断にする明快なモデルを創り出すのは刺激的!