はじめに
私はエンジニア未経験です。現在はエンジニアへ転職活動中です。
なのでここに記載してあることは一個人の考え方・理解であり、間違っている箇所は多々あります。
とあるきっかけでこの本を買い、読んでいるので、自分なりにまとめていこうと思います。
1部 1章について記載してあります。
https://qiita.com/Hiyokokeko/items/02f4cc40dfad70dee6a6
2章について記載してあります。
https://qiita.com/Hiyokokeko/items/15b7f43f41a98c425c39
3章 モデルと実装を結びつける
作ったモデルとコードは分離せずに一つのものとして使っていく。
コードを作る前(モデル)には分析と設計が必要である。
分析・・・基本的な概念をわかりやすく表現力豊かなに。
設計・・・プログラミングできるようにする。ビジネスの課題を解決する。
分析と設計においても切り離さず両方の目的に使えるモデルを探求することをモデル駆動設計という。
-
使用するモデルは1つとして、開発は分析・設計・コードをひとまとめとして考える。
→何かを変更したらそれに合わせて他も変更していく。 -
前章であったように、モデルの変更はユビキタス言語の変更なので共通化していく。
-
コードがより効果的にモデルを表現できるような設計と実装技術を使っていく。(オブジェクト指向プログラミングなど)
オブジェクト指向についてざっくりおさらい
オブジェクト指向=いかに効率良く開発を行うかを突き詰めた考え方。
③つの考え方をもとに設計をしていく。
①他のプログラムから干渉されないように作る考え方。(カプセル化)
②同じようなプログラムは共通化していく。(継承)
③汎用性な形にしていく。(ポリモーフィズム)
↓これらをもとに
物と物の関係性を考えて作成・設計していく。
モデルを実装するためのプログラミング
手続き型言語だとモデル駆動設計を表現するのは難しい。
なのでオブジェクト指向プログラミングを使ってモデル(分析・設計)をコード化していくと、紐付けがしやすい。
↓そうすることで
開発者が表現しやすくなる。
ユーザーが見えている物(UI)にもモデルを反映させていく(別物としない)ことで、ユーザーにとってもサービスが扱いやすいものに。
↓なぜなら
モデルは本来ユーザーとドメインエキスパートの関心ごとを表現した物であるから。
実践的モデラ
ここまでで大切なことは、モデルとコードを密に関係付けること。
↓そのためには
モデルを作る人とコードを作る人を分離させないことが大切となる。
分離はすなわち、モデル駆動設計を失敗させる。(ソフトウェアと無関係なモデルや実装の制約を反映できていないモデルができてしまう)
例えば・・・高いスキルの人が設計して低いスキルの人がコードを書くのは、ウォーターフォール開発や大規模開発で起きがち。
モデルをコードに反映し、それをまたコードで表現できないならモデルはどういった考え方なのかモデルへフィードバックし、モデルを成長させ続ける。(ループ)
全ての開発者はドメインエキスパートとモデルに関する議論に参加しなくてはいけない。
↓
- モデルに貢献する技術者は、一定のコードに触る。
- コードの変更に責任を負う人は、コードを通してモデルを表現するスキルを持つ。
1部まとめ
ドメイン駆動設計はモデルがアプリケーションの問題を解決できるようにする。
知識をかみ砕くことで、ルールが明確となり実用的なモデルへと具体化されていく。
モデル駆動設計はモデルとコードを密に結びつける。
ユビキタス言語はそれら全てに影響し、開発者・ドメインエキスパート・ソフトウェア間で知識をかみ砕くために重要な役割を果たしている。
これにて1部は終了します。