日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Domain Driven Design Quickly Onlineを読む #1

DDDの本を読もうと思ったけど、先が長くて意志の強さが足りそうにないので、こちらから読んでいくことにしました。 章ごとに雑なメモとして解説などではなく、思ったことを淡々と書いていくつもりです。

www.infoq.com

1章

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

メモ

ソフトウェアは業務の自動化や現実世界の問題などの具体的なドメインのためのもの
ソフトウェアは特定のドメインから生まれ、そのドメインと深く関わっている
優れたソフトウェアを作るにはドメインの理解が必要
例)銀行業務
Q. ドメインの理解がある人はだれか A. 銀行員
彼らは全ての細部・全ての落とし穴・全ての潜在的な問題点・全てのルールを知っている。
ここから出発しなければならない。
これがドメインから出発するということ?

ソフトウェアを導入する真の目的はそのドメインの業務をより効率的にするため。
したがって、改善対象のドメインに円滑に適用できなければならない。

ドメインの反映としてソフトウェアを作ることで、ソフトウェアをドメインに円滑に適合させることができる。
ドメインの核となる概念や要素を取り入れ、それらの関係を正確に再現する。
(再現させるために?)ソフトウェアはドメインをモデル化する必要がある。

ドメイン=この世界についての何か
ドメインは、単にキーボードでコンピュータにとり込んだり注ぎ込んだりすればコードになるというようなものではない。
ドメインの抽象的な概念(青写真)=が必要。つまりモデル化が必要。
抽象とはドメインのモデルのこと
ドメインモデルは特定の図で表わされるものではない。
そのような図が伝えようとする概念のこと。
ドメインモデルはドメインの専門家の頭のなかにある単なる知識ではない。
ドメインモデルはそういった知識を厳密に取捨選択しながら作成する抽象のこと。

ドメインモデルは対象のドメインをプロジェクトの関係者に向けて表現したもの。
ドメインはとても多くの情報を含んでいるので全てをモデルに取り込めない。
何をモデルに取り込み、何を捨てるのか。これが設計作業でありソフトウェアの作成。

モデルは他人に伝えなければならない。
私たちは一人で作業するわけではない。

勝手なまとめ

  • ソフトウェア=業務を自動化するもの・現実の問題を解決するもの
  • ドメイン=この世界についての何か
  • ドメインモデル=ドメインの抽象的な概念
  • ドメインについての専門家から必要なものを取り込み、不必要なものを排除したものがドメインモデル

ドメインの知識を構築する

例)飛行機の飛行制御システム システムの目的:飛行機同士が衝突しないようにすること ドメイン:航空監視業務 ドメインの専門家:航空管制官

を元にした具体的なやりとりだった。