5/12 ドメイン駆動設計 Chapter1
ドメイン駆動設計とは
ドメインの知識に焦点を当てた設計手法です。
ドメインとは何か
領域という意味を持った言葉です。
ソフトウェア開発におけるドメインとは、プログラムを適用する対象となる領域を指します。
重要なのは何か
例
- 会計システム
- 金銭
- 帳簿
- 物流システム
- 貨物
- 倉庫
- 輸送手段
知識に焦点を当てるとは何か
ソフトウェアにはユーザーがいる。
ソフトウェアの目的はユーザーのドメインにおける何らかの問題の解決のこと。
ユーザーの直面している問題解決には何が必要か
ユーザーが直面している問題を正確に理解すること。
ユーザーが何に困っていて何を解決したいと考えているか(考え・視点・取り巻く環境)を理解する=ドメインと向き合う必要がある。
ドメインモデルとは何か
現実の事象・概念を抽象化した概念のこと。つまり、現実をすべて忠実に再現はしない。
取捨選択をするのだが、何を取捨選択をするのかはドメインによる。
例1: ペンであればどの性質を抽出するか
- 小説家にとっては文字を書く道具である
- 文字を書けることが大事
- 文房具店にとっては商品である
- 値段が大事
これは、対象が同じものでも、何に重きを置くかは異なるという例です。
例2: 物流システムのトラックであればどの性質をどこまで抽出するか
荷運びができることだけで十分であり、
エンジンキーを回すとエンジンがかかる、というところまで表現する必要はありません。
モデリング
こうして、抽象化する作業のことを指す。
モデル
その結果として得られるもの。
ドメインモデル
知識をコードで表現するドメインオブジェクト
ドメインモデル概念を抽象化した知識であり、問題解決能力はないので、ドメインオブジェクトが必要です。
ドメインオブジェクトとは何か
ドメインモデルをソフトウェアで動作するモジュールとして表現したもの
お互いに影響し合う、イテレーティブ(反復的)な開発が実現される。
イテレーティブな開発とは何か
何度も試行錯誤を繰り返すことで、最適なソフトウェアを作り上げる方法です。
この過程で、ドメインの概念・ドメインモデル・ドメインオブジェクトが互いに影響し合いながら改善されていきます。
つまり、DDDでは問題領域の知識を重視し、繰り返しの開発を行うことで、最終的に問題にうまく対応できるソフトウェアを作成することを目指します。
参考
ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
コメント
以前読んだのですが、私は繰り返し読みアウトプットすることで理解が深まるタイプだと自覚したので、繰り返し同じ書籍・同じChapterのアウトプットもしていきます。