値オブジェクトはどのように保存およびロードされますか?
-
21-09-2019 - |
質問
値オブジェクトのリポジトリがないため。 すべての値オブジェクトをロードするにはどうすればよいですか?
ブログ アプリケーションをモデル化しており、次のクラスがあるとします。
- ポスト (エンティティ)
- コメント(値オブジェクト)
- タグ(値オブジェクト)
- PostsRepository (リポジトリ)
新しい投稿を保存すると、そのタグも同じテーブルに保存されることはわかっています。しかし、すべての投稿のすべてのタグを読み込むにはどうすればよいでしょうか。 PostsRespository にはすべてのタグをロードするメソッドが必要ですか?私はいつもそうしていますが、他の人の意見が知りたいです
解決
この質問に対するより良い解決策を探していたところ、次の投稿を見つけました。
http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/
この投稿では、値オブジェクトとデータベースに関して多くの混乱が生じる理由を非常によく説明しています。ここに私がとても気に入ったフレーズがあります:
- "永続性は、すべてをエンティティに変える言い訳にはなりません。"
Gojko Adzic さん、値オブジェクトを保存するための 3 つの選択肢を教えてください。
他のヒント
私は現在、同様の例を通して働いています。あなたは一意のタグを参照する必要が一度彼らは長い間、単純な値オブジェクトではないと複雑さで成長し続けることができます。私は彼らに自分のエンティティを作成し、それらを取得するための別のリポジトリを作成することを決めました。ほとんどのシナリオでは、彼らが読み込まれているか、ポストに保存されますが、彼らは一人で必要とされているときに、他のリポジトリが使用されます。
私はこのことができます願っています。
編集: この投稿への一部のおかげで、私は少し自分のアプリケーションを再構築することを決めました。私はおそらく間違ってタグの実体を作っていたことをあなたは正しいです。タグは文字列だけであり、ポストリポジトリは、タグの周りのすべてのストレージ要件を処理できるように、私は以来、私のアプリケーションを変更しました。記事を必要とする操作のためのタグは、それらがロードされています。ちょうどリポジトリはそのためのメソッドを持っているタグのタグやリストを必要とします。
すべての操作のためにここで私は、私は現在、DDDを練習してる方法で、この種の問題を解決する可能性がありますどのようにある私のテイクがあります。
あなたは、このようなポストなどから追加と削除するタグを必要とするものを編集している場合は、その後、タグが実体かもしれないが、おそらく彼らは、値オブジェクト可能性があり、ポストのいずれかの方法と一緒にロードされ、保存されます。私は個人的にオブジェクトを変更する必要がない限り、値オブジェクトを好む傾向があるが、私は読み取り専用の「スナップショット」とアイデンティティが不足している実際の値オブジェクトとしてモデル化エンティティオブジェクトの間に差があることを実現します。トリッキーな部分は、おそらく、時にはあなたは、通常のキーがあれば、その文脈におけるアイデンティティとして使用されていないと私はタグがこのカテゴリーに入ると思うと値オブジェクトの一部とすることができるようで何を思うだろうということです。
あなた自身が、それはおそらく別の有界コンテキストまたはタグそのものである、少なくとも別の集合体であるタグを編集している場合は、集約ルートであり、リポジトリを通じて持続しました。この文脈でタグを表すエンティティクラスは、ポストの集計に使用されるタグの同じエンティティクラスである必要はないことに注意します。
このような選択リストを提供するように、読み取り専用の目的のために、ディスプレイ上のタグリスティングが利用できるならば、それはおそらく値オブジェクトのリストです。彼らは実際のドメインについてのUIをサポートしていないについて主にしているため、これらの値オブジェクトはなく、ドメインモデルである必要はありませんすることができます。
誰もがこの上の私のテイクが間違っているかもしれない理由上の任意の考えを持っていますが、これは私がそれをやってきた方法であればチャイムしてください。