単語

本書の前提

  1. ほとんどのソフトウェアプロジェクトにおいて、一番の焦点は、ドメインとドメインロジックに合わせなければならない。
  2. 複雑なドメイン設計は、モデルに基づかなければならない。 ドメイン駆動設計は、1つの考え方であると同時に、ひとまとまりの優先順位でもあり、入り組んだドメインを扱わなければならないソフトウェアプロジェクトを促進することを目指している。 本書では、設計のプラクティスやテクニック及び原則を幅広く紹介する。

本書のアプローチを行う上での前提条件

  1. 開発がイテレーディブである
    • アジャイルを採用していればOK
  2. 開発者とドメインエキスパートが密接に関わっている
    • ドメイン駆動設計は、膨大な知識を噛み砕き、ドメインについての深い洞察と、集中すべき主要な概念を反映したモデルをこうちくするためである。
    • ドメインを理解している人と、ソフトウェアの構築方法を知っている人で行う共同作業である。
    • 開発がイテレーティブであるため、この共同作業はプロジェクト期間中、ずっと継続しなければならない。

序文

前書き

複雑さという課題

設計対開発プロセス

XPについて

第1部

ユーザーの活動に置いて有効利用されるソフトウェアを作成するために、開発チームはその活動に関係する体系化された知識を身につけていかなければならない。
そのために、以下の知識を抑える必要がある。

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

ドメイン駆動設計では、次に示すモデルの3つの基本的用法によって、どのモデルを選択するかが決定される。

  1. モデルと設計の核心が相互に形成し合う
  1. モデルは、チームメンバ全員が使用する言語の基盤である。
  1. モデルとは、蒸留された知識である。

ソフトウェアの核心

第一章

知識を噛み砕く

効果的なモデリングの要素

  1. モデルと実装を結びつける 荒削りなプロトタイプを作ることで、イテレーションを通じてドメインエキスパートとの関係がずっと維持された
  2. モデルに基づいて言語を洗練させる プロジェクトが進むに連れ、全員がモデルから用語をそのまま取り出し、モデルの構造と矛盾しない文章にまとめて、通訳しなくても正確に理解し合えるようになった
  3. 知識豊富なモデルを開発する オブジェクトには、ふるまいと、守るべきルールがある。
    モデルは単なるデータスキーマではなく、複雑な問題と解決するのに欠かせないものだった。
    モデルは様々な種類の知識を捉えていたのだ。
  4. モデルを蒸留する モデルが完成していくにつれて、重要な概念が追加されていった。
    それと同様に、役に立たない、核心でないとわかった概念が取り除かれたということがある。
    本質的な概念を切り分け、その他の不要なものを削除できるように新たなモデルを探し出した。
  5. ブレインストーミングと実験を行う 言語をスケッチやブレインストーミングと組み合わせることで、我々の議論の場はモデルの実験室に変わった。
    そこでは、モデルの実験用バリデーションを多く使用し、試し、使えるかどうか判断することができた。
    チームがシナリオを詳細に検討する際には、会話で使われる表現自体が、提案されたモデルを実現できるかどうかについて調べる簡易的なテストになった。
    表現が的確でわかりやすいか、それともぎこちないかを、聞いてすぐに察知することができたからである。

知識の噛み砕き

継続的学習