イントロダクション/ドメイン駆動設計とは何か?


なぜドメイン駆動設計なのか

オブジェクト指向をエンタ ープライズ分野へどのように適用すればいいのかについてはっきりとした考え 方がありません。

DDDとは何なのかについ て正確な要約を試みたのがこの本です。

イントロダクション

ドメイン駆動設計とは何か

  • ソフトウエアを開発する目的は、実世界の作業を自動化したり、ビジネス上の 問題を解決することです。
  • 優れたソフトウエアを作るためには、そのソフトウエアが一体何なのか知らなければなりません。
  • ドメインに対する十分な知識を持たずに、複雑な銀行業務システムを構築する ことは不可能。

Q: では誰がドメインを知っているの?

ソフトウェアアーキテクト

彼は自分のお金を安全に保管したり、必要なときに引き 出したりするために銀行を利用しているだけです。

ソフトウエアアナリスト

彼は必要な材料をすべて与えられたときに、与えら れた案件について分析することができるだけです。

開発者

だめです。 (本には理由無し)

銀行員 (実際の利用者)

銀行業務システムは銀行の中で働 く人々や専門家がとてもよく理解しています。すべての細部、すべての落とし 穴、すべての潜在的な問題点、すべてのルールを知っているのです。

ドメインは自動化したい、ビジネス上の問題を解決したいと思っている実際の利用者しか知っていない。

ドメインモデルとは

  • ドメインモデルは、そういった知識を厳密に取捨選択しながら作成する抽象です。
  • 対象のドメインをプロジェクトの関係者に向けて表現したもの。

But

私たちを取り巻く世界をそのまま扱うと、頭に大変な負担がかかってしまいます。特定のドメインですら、ひとりの 人間の頭脳では一度に扱えません。

=> したがって、情報を整理し、システム化し、 より小さな部分に分割し、論理的な単位にまとめて、一度に扱えるようにする 必要があります。

「一番大切なのは私たちは一人で作業しないのでモデルを他人に伝えなければならない」

「ドメインの専門家」と「ソフトウェアの専門家」が共通で理解できるドメインモデルを作成する事が不可欠

それを阻む「言語の壁」

  • プログラムの言葉 クラス、継承、パターン
  • 専門の言葉

### 意識の壁
- あたりまえだと思ってるもの