2017-05-27 13 views
0

私はいくつかのアーキテクチャ/パターンの質問があります。私は2つのクラスを持つドメインモデルを持っていると仮定します。私はコードファーストとリポジトリパターンを使用します。 (私はフィールドだけではなく、プロパティを使用する例では、それはよりシンプルにするために)DTOの集計フィールド

public class Person { 
    public int Id; 
    public string Name; 
    public string Surname; 
    public virtual ICollection<Pet> Pets; 
} 
public class Pet { 
    public string Name; 
    public int BirthYear; 
    public int OwnerId; 
    public Person Owner; 
} 

私もPersonDtoでペットフィールドは、単純なリストであることを、唯一の違いは、PersonDto、およびPetDtoクラスを持っています。 Automapperを使ってモデルクラスをdtoに変換します。 Dtoは、次にREST APIを通じてクライアントに送信されます。さて、ある人の見解では、名前、姓、PetCountを見せなければならない場合はどうすればいいでしょうか?(多くのペットがいるので、データベースから抜き出して単純に見積もるのは非常に効率的になりません。

今、PetCountを導入する正しい方法は何でしょうか。私はこのフィールドをPersonクラスとPersonクラスに入れ、それがデータベースにカラムを作成しないようにする必要があります。あるいは、私はPersonDtoでPetCountフィールドを作成してください - しかし、この値をいつリポジトリメソッドでカウントするか、あるいはマッピングしているときに(後者は私にとって正しいと思われません)。別の質問は、PetDtoで余分なフィールドを作成する必要があるかどうか、あるいはPersontWithPetCountDtoでPersonDtoを継承するか、継承なしでPersontWithPetCountDtoクラスを継承する必要があるかもしれないが、PersonCountフィールドとPersonDtoのすべてのフィールドを含む。

答えて

0

PetCount属性がPersonの場合、PetからOwner属性を使用してアクセスできます。したがって、質問はPersonPetCount属性を必要とするかどうかに減らされます。答えは選択の結果になります。

  • この値はどのくらいの頻度で使用されますか?
  • この番号の更新日数はどのくらいですか?
  • この番号はどのくらいの頻度で変更されていますか?一般的に

あなたがPetCountが必要という結論に達した場合、その後、あなたはことを確認する必要があります:あなたにもそのOwnerPetCountを更新Petを挿入するには

  1. Ownerは を変更した場合 Petはあなたがその古い Owner年代と新しい OwnerPetCountが更新されていることを確認します更新の
  2. さんPetCountが更新されPetそのOwnerを削除するには
  3. 状態上記の動作の障害のいずれかの種類に以前の状態

あなたが到達した場合にロールバックされますことをあなたが確認するためにトランザクションを使用

  • PetCount属性が必要ないという結論に達すると、必要なときに毎回計算する必要があります。

    キャッシングシステムを含むハイブリッドソリューションも使用できます。最適な選択はあなた次第です。

    関連する問題