エリック・エヴァンスのドメイン駆動設計
https://gyazo.com/e2b567a407a939c09b9409d74ea3a2c8
ソフトウェアの技術にしか関係しない概念を、ドメインの概念に紛れ込まないように切り離す
ドメインの実装を隔離することは、ドメイン駆動設計の必要条件
集約
自動車が集約ルートのエンティティになり、内部のタイヤや車輪は自動車を通してアクセスすること
外部から直接タイヤや車輪を操作しないこと
不変条件を維持する
ファクトリ
カプセル化する
詳細を隠したい
集約を実現する
値オブジェクトファクトリは不変なオブジェクトを生成して返す
エンティティファクトリは、一意性を保つためのid付与が必要になる
再構築ファクトリの場合は、idが引数として必要
リポジトリ
関連を辿れるようにするか、それとも検索に頼るかは設計上の決定
リポジトリはある意味グローバルなデータだが、グローバル変数のような問題を起こしにくいように設計できる
グローバルアクセスを必要とするオブジェクトの各型に対して、あるオブジェクトを生成し、その型のすべてのオブジェクトで構成されるコレクションが、メモリ上にあると錯覚させることができるようにすること。
Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Japanese Edition) (Kindle の位置No.3562-3564). Kindle 版.
小さいリファクタリングを繰り返して、ブレイクスルーを得る
一度に大きなリファクタリングでブレイクスルーを狙わないこと