DDD Part1 まえがき

DDD勉強メモ

出典: 

  • モデルとは簡略化である

    • 現実の、ある側面
    • 興味の対象
  • 手近な問題を解決するために、現実の、ある側面を抽象化
  • 関係のない詳細は無視する
  • ドメイン

    • S/Wはユーザーの興味や行動に関連している
    • ユーザーがS/Wを利用するうえでの主題の領域
  • ドメインには有形/無形がある

    • 有形・物理的

      • 例: 航空予約システム

        • 現実の人間や飛行機が絡む
    • 無形

      • 例: 支払いシステム
  • ドメインそれ自体がコンピューターと関係することはまずほとんどない = 大抵の技術者にとっては専門外

    • 例外: ソースコード管理システム
  • 利用者の活動についての知識体系を意識的に理解しにいく必要がある

    • 量・複雑さに圧倒される
    • これと格闘するためのモデル
  • モデル

    • 知識を

      • 抜粋して簡略化したもの
      • 意識的に構造化したもの
  • ドメインモデルとは、ドメインの専門家の脳内の知識を、厳格に組織化し、選択的に抽象化したもの
  • ドメインモデルとは、特定の図面ではない

    • 図面というのは伝える手段に過ぎない
    • コードだろうが英文だろうがおなじ
  • モデリングとは、なるべく現実に即する、というものではない

    • 目的に応じてゆるく表現するもの

DDDにおけるモデルの利用

モデルの3つの使途

  1. モデルと設計の中心とが互いを形作る

    • モデルと実装とが親密に結びつくことで、
      モデルやその分析が最終的な製品に結びつく

      • 【補】実装したものがユーザーの目的を満足しない、というようなことを避ける
    • 保守の助けになる

      • コードはモデルを理解し翻訳したものであるから
  2. チームメンバーがコミュニケーションする際の、語彙の根幹となる

    • 実装とモデルとが結びついているので、実装について話すとき、モデルの語彙で話できる
    • ドメインの専門家とも同じ言葉で話せる
    • 語彙はモデルから生じたものなので、
      逆に、語学能力によりモデルを洗練することもできる
  3. 知識の本質を抽出したもの

    • チームの合意のもとドメインの知識を構造化したもの
    • 一番の興味の対象を際立てている
    • 言葉を選定し、概念を細分化する過程で、考える対象が抽出されている
    • モデルと実装とを結びつけることで、早期バージョンでの経験を「フィードバック」という形でモデリングに反映できる

      • プロトタイピングのことを言っている?

ソフトウェアの核心

  • ユーザのドメインの問題を解決することが最重要
  • ドメイン自体が複雑だと大変
  • 開発者は下記をする必要がある

    • ドメインに没頭してビジネスロジックの知識をつける
    • モデリング技術の研鑽
  • たいていの開発者はこれに興味ない

    • 計算機科学とはおよそ程遠そう
    • ドメインを学び、モデリングすることは他人に丸投げしがち
  • ドメインの複雑性は真向から取り組まねばならない
  • コメディ映画の制作の話

    • つまらないシーンがあり、面白く撮り直した
    • 翌日、ラフカットを確認すると、つまらない版が使われていた
    • 「なぜ面白く撮れたものを使わなかったか」と編集者に問い詰めた
    • 「誰か見切れちゃってて使えなかった」と返された
    • 誰かのコートの袖が一瞬、ほんのちょっと入っていた

      • コメディ映画として大した問題じゃない
    • 他の編集者に「欠陥がある」と判断されることを恐れてのこと

      • 大した問題ではないことのために、「コメディ映画をつくる」というドメインにおいて最重要である「面白いこと」を切り捨ててしまった
    • コメディに理解のあるディレクターにより、面白い版に差し戻されて事なきを得た

      • ドメインをよく理解している人により軌道修正された
  • 複雑なドメインをわかりやすいモデルに切り分けていくのは楽しい
  • 本書では下記を提供していく

    • 効果的なモデルをつくるための体系的な考え方
    • 無秩序なソフトウェアに秩序をもたらす設計テクニック

英語

  • perfunctory

    • 通り一遍の、おざなりの、投げやりな
  • extraneous

    • 外側の、無関係な

      • at hand (手近な)の対
  • intangible

    • 無形の

      • 「無形資産」とかいうときのやつ
  • daunting

    • 骨の折れる
  • grappling

    • 格闘する
  • idiosyncractic

    • 奇異な、風変わりな、特有の
  • intimate

    • 親密な
  • steep onself in

    • …に没頭する
  • hone

    • 技術等を磨く
  • get lost in the shuffle

    • 混迷の中で失われる・忘れられる