2

Question と QuestionLog という 2 つのエンティティがあります。質問は明らかに質問を表し、QuestionLog はユーザーが特定の質問について報告できるエンティティを表します。たとえば、質問が間違っている場合、品質が低い場合などです。

今私が読んだことから、リポジトリを持つ唯一のオブジェクトは集約オブジェクトであり、接続されている質問が削除された場合、QuestionLog オブジェクトはシステムに存在しないはずなので、Question が集約ルートになると思いました。

これは、そうすることが理にかなっているシナリオですか?

また、ユーザーが送信した QuestionLogs のリストが必要な場合はどうすればよいでしょうか? 次に、ユーザーが送信したすべての QuestionLog を取得する JPQL を作成しますか?それとも、意図したとおりに機能しませんか? 代わりに、その特定のユーザーによって QuestionLog が添付された Question のリストを取得し、すべての Question をループして各 QuestionLog のプロパティを表示する必要がありますか?

Question クラスの外で QuestionLog オブジェクトを使用することを許可する必要があるためですか? 私は制限とそれがどうあるべきかについて少し混乱しています。

4

2 に答える 2

0

QuestionLog対応する がなければ意味がないのでQuestion、その通りです。これは集約ルートではありません。

行うすべてのアクションは、集計QuestionLogを通過する必要があります。Question

ユーザーのリストが必要な場合は、集計でメソッドQuestionLogを定義する必要があります。ユーザーのすべての質問を取得する必要はありません、集計を通じて へのアクセスを制御します。QuestionGetQuestionLogsForUser(user aUser)QuestionLog

集約ルートの外部でオブジェクトを使用することはできますQuestionLogが、それに対するアクションは集約ルートを介して行う必要があり、特に永続性の問題があります。

于 2012-10-26T09:13:18.833 に答える
0

Oded が指摘したように、インスタンスに関連付けられたすべての動作は集約QuestionLogを通過する必要があります。Questionただし、クエリの場合は、もう少し柔軟性があります。特定のクエリに適したインスタンスQuestionを返す集計にメソッドを含めることができますが、要件によっては、このアプローチが実用的でない場合があります。QuestionLogこの場合、読み取りモデル パターンを採用し、質問 ID とフィルターに基づいて質問ログを取得する専用のリポジトリを用意できます。これにより、クエリにデータベースを活用できます。確かに、質問に関連付けられたロジックの一部が集計の外部に「漏れる」ことがあります。これは、特にすべての動作が集計で保持されている場合は、公正なトレードオフです。

集合体の境界を考えるとき、技術的な懸念を完全に忘れることはできません。Questionには、非常に多数の関連する質問ログがあると予想される場合があります。この場合、小さなサブセットを返すクエリのために集計全体をメモリにロードするのは現実的ではありません。QuestionLog集計自体を作成することも検討できます。このテーマに関する詳細な議論については、Vaughn Vernon による「Effective Aggregate Design 」をご覧ください。

于 2012-10-26T16:15:59.667 に答える