2017-06-22 3 views
0

こんにちは私はasp.netコア1.1を使用して少しC#のWebアプリケーションを書いていますEF(コード初)とMVCC#エンティティフレームワークはモデル内でより良い関数または計算されたプロパティですか?

私は最高の工学の選択肢が何であるか知りたいです。 クラスがあり、1つ以上の関連プロパティを使って何かを計算する必要があるとしましょう。のは、例を作ってみましょう:だから

class A 
{ 
    public virtual int Id { get; set; } 
    public virtual Collection<B> Bs { get; set; }  

    public int GetMaxB() 
    { 
     return Bs.Max(b => b.Num); /*simple example, can be more complex */ 
    } 
} 

class B 
{  
    public virtual int Id { get; set; } 
    public virtual int Num { get; set; } 
} 

GetMaxB()のために(1行だけでなく、のは、より複雑な関数について考えてみましょう)最良の選択肢は何か?

    コントローラでモデルクラスに
  • 機能
  • 発生(NotMapped)モデルクラスのプロパティ
  • 機能
+0

ビューの場合は、ビューモデルを作成し、それを設定します。 – Fran

+0

依存しています...あなたがいつでも 'Bs'がロードされているとは思えません。 –

+0

また、Bの一部だけが読み込まれている可能性があります。誤解を招く可能性があります。 – MORCHARD

答えて

0

あなたのロジックは、VMの一部であってもよいですモデルとの混合を望まないかもしれません。これは、プロパティを持つ純粋なクラスでなければなりません。

+0

はい、デコレータで!良い選択のようですex: class AViewModel { public A a {get;プライベートセット;} public AViewModel(A a){this.a = a; } public int GetMaxB(){/ * blah * /} } –

+0

拡張メソッドはどうですか?私は計算されたプロパティでクエリを作成したい場合、VMはクールではありません –

0

プロパティの状況や性質によって異なります。

DiscountValue(他のプロパティはほとんどない)のような計算されたプロパティは、Modelクラスの一部です。

GetMaxB()の使用頻度が低い場合は、Modelの関数になります。

GetMaxB()がクラスAで使用されるコレクションクラスの理由にすぎない場合、提供された使用が頻繁ではないと考えることができます。

関連する問題