リポジトリ
オブジェクトの参照を取得するのに必要なロジックを全てカプセル化するためのパターン
リポジトリはどこからでもアクセスできるオブジェクトの保管場所として機能する
クライアントはモデルに集中して、オブジェクトの保管やオブジェクトの取得は全てリポジトリに任せること
解決される問題点
ドメインのロジックがSQLやクライアント内に移動し始めるとエンティティもバリューオブジェクトも単なるコンテナになってしまいます
→ドメインレイヤが薄くなりドメインモデルと関係なくなる
hiroki.iconまさに、そうなっていた時があった。けど、一度ロジックが溢れ出し始めると止められなくなるんだよねぇ
多くのオブジェクトはデータベースから取得できる→直接クライアントが取得する(安易
アグリゲートのカプセル化が破られる
レイヤーが混ざり始める
ファクトリとリポジトリの関係
どちらもドメインオブジェクトのライフサイクルを管理するのに役立つ
ファクトリはオブジェクトの作成を管理
リポジトリは既存のオブジェクトを管理
/icons/point.icon リポジトリもオブジェクトを作成するのでファクトリと同じに見えてしまうが。。。
ファクトリは新しいオブジェクトの作成のみ
リポジトリは既存のオブジェクトを再作成
table:ファクトリとの相違点
リポジトリ ファクトリ
オブジェクトの作成 既存のオブジェクトを作成 新しいオブジェクトを作成
モデル的に インフラストラクチャ→データベースと結びつく ドメインの要素