「ドメイン駆動設計 モデリング/実装ガイド」の読書メモ
https://booth.pm/ja/items/1835632
第2章 モデリングから実装まで
- ドメイン知識はドメイン層の対応するオブジェクトに書く
- 常に正しいインスタンスしか存在させない
- 「アプリケーションとして何を行うのか」を定義するのが一番開発につなぎやすい
第4章 設計の基本原則
- 基本的に高凝集・低結合を目指す
第5章 アーキテクチャ
- よくある3層アーキテクチャ(プレゼンテーション層、ビジネスロジック層、データアクセス層)の問題は、ビジネスロジック層が低凝集になること
- レイヤードアーキテクチャ
- プレゼンテーション層(クライアントとの入出力)
- アプリケーション層(ユースケースの実現)
- ドメイン層(ドメイン知識の表現)
- インフラ層(データベースとの入出力)
- レイヤードアーキテクチャの問題はドメイン層にリポジトリを置く場合、インフラ層(特定のDBなど)に依存すること
- ドメイン層が特定のインフラ技術に依存しないことの解決策の1つがオニオンアーキテクチャ
- オニオンアーキテクチャでは、リポジトリはインターフェースをドメイン層に、実装クラスをインフラ層に定義する
- オニオンアーキテクチャでは、ドメイン層はほかの層への依存を持たせない
第6章 ドメイン層の実装
- リポジトリはListのように扱う。
- 「ユーザ登録する」「ユーザを退会状態にする」メソッドを持たせず、新規登録状態のユーザー、退会状態のユーザーをaddするという使い方