勉強日記

チラ裏

DDD 序文とか

www.informit.com

Foreword by Martin Fowler

  • ソフトウェアの複雑性
    • 本質的に、問題のドメインそれ自体が複雑
    • なくすことはできない、制御できるのみ
  • 複雑性を制御するには、ドメインをうまくモデリングすることがカギ
    • できる人はそうはいない
    • 人に教えるのはすごくむずかしい
  • 本書は、ドメインモデリングを説明し、語彙を与える本
  • 概念と実装とは分けるべきではない
  • 「デザインして、しかる後に作る」ではない
  • 成功体験だけでなく、失敗も載せているのがすばらしい
    • 両方から得たものを読者に提供してくれる

Preface

  • ドメインモデリングの重要性は古くから気づかれていた
    • が、方法論に関する書籍がぜんぜんなかった
  • 複雑なシステムを構築してきた
    • 成功・失敗両方経験した
  • 成功したものに共通すること
    • リッチなドメインモデルを構築していたこと
      • 設計を繰り返す中で成長する
        • 【補】たぶんリファクタのこと
      • プロジェクトの骨子
  • この本の提供するもの

Contrasting Three Projects

  • ドメインモデリングなしに、経験と勘で突き進んで失敗したケース
    • 最初のリリースはうまくいった
      • まだシンプルだったから
    • バージョン2を出せなかった
      • バージョン1が負の遺産となった
        • 満足に構造化されない未熟な状態で凝り固まってしまった
        • ビジネスロジックの変化に追従できなかった
  • ちゃんとドメインモデリングして成功したケース
    • 開発者のみならず、開発者とドメイン専門家とのコミュニケーションも円滑に
    • 設計が柔軟に
  • ちゃんとドメインモデリングしたが、まじめにやりすぎて失敗したケース
    • ちゃんと設計してから作ろう、という遠大な志
    • 開発のイテレーションを回してもコードが向上しない
      • 開発者ごとにスキルのレベルが異なるから
    • ガチガチに形式ばった結果
      • 開発プロセスが複雑になり泥沼化
      • システムに関して、チーム全員が共通認識をもてなくなった
    • 結局、志を下げて、ガチガチにやらなくして、いい感じのものをリリースできた

複雑性による困難

  • プロジェクトがうまくいかなくなる要因
    • ソフトウェアの複雑性
    • 煩雑すぎるプロセス
    • 不明瞭な目的
    • リソース不足
  • 複雑性は設計に大きく左右される
    • 技術的側面
      • 多くの書籍が書かれ、多くの技術者が修練を積んできた
        • N/W
        • DB
        • etc.
    • 技術的でない側面
  • 本書の前提となる考え方

設計と開発プロセス

  • 設計と開発プロセスは不可分
    • 設計思想は開発・実装につながらねばならない
    • さもなくば、学術的な議論に終わってしまう
  • 設計を学んだ者は可能性にわくわくする
  • そして現実に打ちひしがれる
    • 使用技術とマッチしない
    • いつ、時間の都合で妥協すべきかわからない
    • いつ、妥協せずにこだわるべきかわからない
  • 設計について抽象的に議論するよりも、開発で実際になされる内容をあげたほうがわかりやすい
  • ので、開発プロセスのことについてもあえて言及する
  • 本書は特定の方法論に基づいた本ではないが、アジャイルを意識してはいる
  • 以下、プロジェクトに求める前提要件
    • 開発が反復型であること
    • 開発者とドメイン専門家とが密にコミュニケーションをとっていること
  • XPのはなし
    • コミュニケーションに重きをおく
      • モデルと設計によりコミュニケーションの質が左右される
    • プロジェクトがすばやく舵を切れることに重きをおく
      • ミニマリズム
        • 巨大で取り回しの悪いわりに、あまり価値を生み出さないドキュメンテーションからの解放
        • 過剰実装はNG
        • 過剰実装をさけるあまり、設計について深く考えなくなるのもNG
      • 絶え間なくリファクタ(=小さな再設計)
        • XPはすぐれた設計センスありきのもの
        • リファクタ前の設計により、難度は左右される

英語

  • du jour [də dʒə́ːr]
    • 【仏】今はやりの、最新の
      • 後置修飾
  • intricacy
    • 複雑さ、込み入っていること
  • gestate
    • 思想・計画等を温める
      • 満を持している感じ
  • old hands
    • 熟練者たち
  • a raft of
    • 大量の
  • disinterested
    • 私心のない、公正な
      • uninterested (興味のない)とはだいぶ違う意味
  • omnipotence
    • 全能
  • fly by the seat of one's pants
    • 経験と勘を頼りにする
  • bogged down
    • 泥沼にはまった
  • exemplary
    • 模範的な
  • ossify
    • 骨化する
    • 変えられなくなる
  • legacy
    • 遺物
      • 遺産とか負債とか
  • upward trajectory
    • 上向きの軌道 -> 出世コース
      • 本文では、「上り調子」くらいの意味か
  • incisive
    • 鋭敏な
    • 鋭利な
      • 日本語で言う「キレッキレな」が近いかも
  • virtuous cycle
    • 好循環
  • lofty aspirations
    • 高い望み、遠大な志
  • become mired in
    • ...で泥沼にはまる
  • bureaucracy
    • 官僚政治
    • 転じて、官僚的に煩雑な手続き
  • to name a few
    • 2,3例を挙げると
  • a great deal of
    • 多大な
  • legions of
    • 多数の
  • cultivate
    • 修める、練磨する
      • skills 等を目的語にとって
  • inextricable
    • ほどけない、不可分な
  • dry up
    • 干上がる -> ~に終わる
  • descend on
    • ...を急襲する
  • let go of
    • 離す -> あきらめる
  • in the interest of time
    • 時間の都合で
  • dig in one's heels
    • 妥協を拒む、頑なに自分の意見に固執する
      • let go of の対として使用
  • advocate
    • 提唱する
  • profound
    • 深遠な
  • once in a while
    • 時たま
      • ある日突然急成長したりするやつ
  • onion peeling
    • ちょっとずつ進むこと
  • delve
    • 掘り下げる
      • digのような「穴を掘る」的な意味はたぶんない
  • sprawling
    • 広大な
  • center of discourse
  • lucid implementation
    • わかりやすい実装
  • scrutinize
    • 精査する
  • grope
    • 模索する
  • pore over
    • しげしげと見つめる
  • shepherding process
    • PLoP: Pattern Languages of Programs の査読フェーズ