2012-02-15 4 views
6

私はDDDに従おうとしており、私はQuestionクラスとFeedbackクラスを持っています。私は質問の数、フィードバックの数、およびメタ操作と見なされる他の多くのものを数えることができるようにしたい。DDDのリポジトリクラス

このような「メタ」メソッドは、そのクラスに属する他のメソッドと同じリポジトリに存在するか、データベースにクエリするメタメソッドが異なるMetaRepositoryに存在する必要があります(この場合はすべてのクラスが混在します) )?

+2

どのデザインがあなたのドメインに最も正確に対応していますか? – blueberryfields

+0

実際に私は両方が上品だと思った。これはまだホワイトボードに載っていますので、私は変更が可能です:)私が何をすべきか教えてくれない人がいなければ、彼らが属するクラスにメタメソッドを配置します。 – LuckyLuke

+0

両方のマップを同じようにドメインにマップしますか?たとえば、質問/フィードバックは、ドキュメントやアンケートなど、何らかの種類のコンテナの一部である場合があります。コンテナは、それがどれだけ含まれているのか、何が何であるのかを知る可能性が高く、カウント方法が必要な場合があります。 – blueberryfields

答えて

8

何も記載されていない目的のためにMetaRepositoryを作成する見たことがない、ドメインモデルクラスごとに単一のリポジトリのよりに固執、または一般的なリポジトリ

を使用します集約ごとに複数のリポジトリを持つことを禁じます。基本的なクエリとライフサイクルメソッド(IQuestionsRepository)と、「メタ」または「統計」目的(IQuestionsStatistics)と呼ばれるもののための別個のリポジトリ用のリポジトリを1つだけ持つことができます。これは、1つのリポジトリごとの集約の原則の下で、「メソッドの爆発」とSRP違反が発生する可能性がある、より大きなドメインではうまく機能します。 DDDに続いて、基本的なOOPの原則に反するべきではありません。

1

私にとって、各リポジトリは要素の数をカウントする責任があり、getById、getAll ...(標準メソッド)の1つのメソッドです。

0

あなたのドメインの重要な部分を指しているこれらの質問(「どのくらいフィードバックがありますか?

もしそうなら、彼らはあなたのリポジトリを置くために妥当なクエリのように思えます。リポジトリの仕事は結局、それに含まれる集計に関するドメイン関連の質問に答えることです。

おそらくユーザーに表示するための単なる偶発的なものであれば、これらの質問はドメイン層の外部にあるアプリケーションサービスに属している可能性があります。

0

私は個人的に誰もがあなたがDDDで