Open9
DDD
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
DDD: Domain Driven Design (ドメイン駆動設計)
ソフトウェア開発手法の一つで、モデリングから劇的な利益を得られたプロジェクトから成功パターンを抽出したもの
ドメインモデリングによってソフトウェアの価値を高める
※ ドメイン:ソフトウェアで問題を解決しようとする対象
モデル
DDDにおいては問題解決のために物事の特定の側面を 抽象化 したもの。
現実世界のすべての要素をソフトウェアに落とし込むことは不可能なので要素の必要/不要を選択した結果が抽象化。
ドメインモデルとデータベースモデルは明確に区別すること
- ドメインモデル:ドメイン解決のためのモデル
- データベースモデル:データベースに何かを永続化するためのモデル
問題解決ができることがが良いモデルの前提。
ドメインに詳しい人から知識を得たり運用をもとにフィードバックして 継続的に改善していく 。
継続して改善していくために、モデルをそのままコードに落とし込み、拡張性の高い設計にしていく必要があり、それを実現するためのテクニックが Entity や Repository などのデザインパターン。
軽量DDD
DDDのデザインパターンやベストプラクティスだけ取り入れること。
コード品質をあげることでモデリングする余地が生まれると考えることもできるので、
まずは取り入れてみるだけでも十分価値がある。
モデリング手法
1つに決まった方法はない。
- リレーションシップ駆動要件分析(RDRA)
- ユースケース駆動分析設計
ユースケース図
ユーザーとアプリケーションの相互作用を定義することで、「誰が、何をしたいのか」を明確になり、ドメインモデルの役割も明確になる。
また、限られた時間でまとまった成果を足せるようにするため、ドメインモデル図作成のスコープを限定する。
ドメインモデル図
- メソッドは不要
- 代表的な属性
- 業務のルール・成約
- 集約の範囲
集約
- 必ず守りたい強い整合性を持ったオブジェクトのまとまり
- 取得、更新する単位(リポジトリで取得できる、更新できる単位)
外部リンク
ドメイン駆動設計 モデリング/実装ガイド
複数集約をドメインイベントで更新する
松岡さんの解説記事
それを TypeScript x Node で実装してみた記事
EventEmitter について