12

値オブジェクトのリポジトリがないため。すべての値オブジェクトをロードするにはどうすればよいですか?

ブログアプリケーションをモデル化していて、次のクラスがあるとします。

  • 投稿(エンティティ)
  • コメント(値オブジェクト)
  • タグ(値オブジェクト)
  • PostsRespository(リポジトリ)

新しい投稿を保存すると、そのタグが同じテーブルに保存されることを知っています。しかし、どうすればすべての投稿のすべてのタグを読み込むことができますか。PostsRespositoryには、すべてのタグをロードするメソッドが必要ですか? 普段はやってますが、他の人の意見を知りたい

4

3 に答える 3

12

私はこの質問に対するより良い解決策を探しています、そして私はこの投稿を見つけました:

http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/

この投稿は、値オブジェクトとデータベースに多くの混乱がある理由を非常によく説明しています。ここにあなたは私をとても好きだったフレーズです:

  • 永続性は、すべてをエンティティに変える言い訳ではありません。

Gojko Adzic、値オブジェクトを保存するための3つの選択肢を教えてください。

于 2010-02-17T23:34:26.120 に答える
3

私は現在、同様の例に取り組んでいます。タグを一意に参照する必要がある場合、それらはもはや単純な値オブジェクトではなく、複雑さを増し続ける可能性があります。それらを独自のエンティティにし、それらを取得するための別のリポジトリを作成することにしました。ほとんどのシナリオでは、それらは投稿とともにロードまたは保存されますが、それらが単独で必要な場合は、他のリポジトリが使用されます。

これがお役に立てば幸いです。

編集:この投稿のおかげで、アプリケーションを少し再構築することにしました。あなたは私がおそらくタグを誤ってエンティティにしたのは正しいです。その後、アプリケーションを変更して、タグが単なる文字列になり、ポストリポジトリがタグに関するすべてのストレージ要件を処理するようにしました。投稿が必要な操作の場合、タグが一緒に読み込まれます。タグまたはタグのリストのみを必要とする操作の場合、リポジトリにはそのためのメソッドがあります。

于 2010-02-17T00:27:55.887 に答える
0

これが、私が現在DDDを実践している方法で、このタイプの問題をどのように解決できるかについての私の見解です。

投稿など、タグの追加と削除が必要なものを編集している場合、タグはエンティティである可能性がありますが、値オブジェクトである可能性があり、いずれかの方法で投稿と一緒にロードおよび保存されます。オブジェクトを変更する必要がない限り、私は個人的に値オブジェクトを好む傾向がありますが、読み取り専用の「スナップショット」としてモデル化されたエンティティオブジェクトと、アイデンティティを欠く実際の値オブジェクトには違いがあることを認識しています。トリッキーな部分は、おそらく、通常はキーと考えるものが、そのコンテキストでIDとして使用されていない限り、値オブジェクトの一部である可能性があり、タグがこのカテゴリに分類されると思います。

タグ自体を編集している場合、それはおそらく別個の境界コンテキストであるか、タグ自体が集合ルートであり、リポジトリを通じて永続化されている少なくとも別個の集合です。このコンテキストでタグを表すエンティティクラスは、Postaggregateで使用されるタグと同じエンティティクラスである必要はないことに注意してください。

選択リストを提供するなどの読み取り専用の目的でディスプレイに使用可能なタグをリストする場合、それはおそらく値オブジェクトのリストです。これらの値オブジェクトは、実際のドメインではなく、主にUIのサポートに関するものであるため、ドメインモデルに含めることができますが、含める必要はありません。

なぜ私の考えが間違っているのか誰かが考えているなら、チャイムを鳴らしてください。しかし、これは私がやってきたやり方です。

于 2012-12-03T05:02:03.170 に答える