新卒の同期間でドメイン駆動設計(DDD)の勉強会を行った際に読んだ
について、ざっくりですが、解説します。
※ かなりざっくりなので、厳密には違うこともあるかもしれないです。
第1章 DDDって何?
1.1 DDDとは?
DDD(Domain Driven Design : ドメイン駆動設計)
- ソフトウェアの開発手法
- ソフトウェアをどのように設計していくかの理論。
- DDDは難しい
※ DDDが初心者にとって難しいということについては、なぜDDD初心者はググり出してすぐに心がくじけてしまうのか
1.2 DDDでは何をする?
開発者とドメインエキスパートが協力して、ドメインを反映させたモデル(ドメインモデル)を作り上げる
- ドメイン : ソフトウェアを適用する対象範囲
- ドメインエキスパート ドメイン(対象領域の業務知識)について詳しい人(上司やビジネス側の人間)
1.3 ドメインを反映したモデル
- ドメインモデル : 業務ドメインに特化したソフトウェアのモデル
- ドメインを反映したモデル : ドメインを構成するもの、概念、振る舞い、関連性を表現したもの
効率的にDDDを行うには?
- 開発がイテレーティブ(反復的、PDCAサイクルみたいなもん、参考 : 反復型開発)
- 開発者とドメインエキスパートが密接(
密です)
1.4 DDDにすべき理由
- ドメインエキスパートと開発者が同じ土俵に乗ることで、プログラマーの視点だけではなく、業務側の視点も踏まえたソフトウェアを作れるようになる
- ソフトウェアに関して理解している人が一部の人(たいていは開発者)たちだけという状況をなくすことができる
- ドメインエキスパートとソフトウェア開発者、そしてソフトウェアそのものとの間で、一切の通訳が不要となる
- 設計がコードであり、かつコードが設計である(名言)
1.5 DDDの要素
-
戦略的設計 : 考え方・概念
- ユビキタス言語(第2章)
- 境界づけられたコンテキスト(第4章)
- コンテキストマップ(第5・6章)
-
戦術的設計 : 技術的手法
- エンティティ
- 値オブジェクト
- サービス
- レイヤー化アーキテクチャ
- etc
※戦術的設計については、ドメイン駆動設計入門は新人時代にDDD挫折した私にも分かりやすかったが参考になると思います。
Next
TBD