2016-12-20 3 views
1

私が組み込まれているロジックたとえばプロパティを持つクラスを持っている場合:ロジックがあるときに、バッキングフィールドを持つプロパティに変換する必要がありますか?

class myModelClass 
{ 
    public List<SummaryModel> Coupons {get;set;} 

    public decimal AlaCarteTotal 
    { 
     get 
     { 
      if (Coupons != null) 
      { 
       if (!Coupons.Any(x => x.GromotionApplied)) 
       { 
        return Coupons.Sum(x => x.DefaultPrice); 
       } 

       return Coupons.Sum(x => x.GromotionApplied ? x.GromoPrice : x.DefaultPrice); 
      } 

      return default(decimal); 
     } 
    } 
} 

...ここのようにバッキングフィールドを持つようにクーポンを変換する方が良いでしょう:

class myModelClass 
{ 
    public List<SummaryModel> Coupons 
    { 
     get 
     { 
      return _Coupons; 
     } 
     set 
     { 
      _Coupons = value; 
     } 
    } 

    public decimal AlaCarteTotal 
    { 
     get 
     { 
      if (_Coupons != null) 
      { 
       if (!_Coupons.Any(x => x.GromotionApplied)) 
       { 
        return _Coupons.Sum(x => x.DefaultPrice); 
       } 

       return _Coupons.Sum(x => x.GromotionApplied ? x.GromoPrice : x.DefaultPrice); 
      } 

      return default(decimal); 
     } 
    } 
} 

一般的に、モデルクラスに何らかのゲッターロジックが含まれている場合、そのプロパティをバッキングフィールドを持つものに変換する必要がありますか?

+1

私は混乱している...あなたの 'Coupons'プロパティには、任意のロジックを持っていません。だからなぜそれを裏打ち場にしたいのですか? 'AlaCarteTotal'はロジックを持つプロパティですが、バッキングフィールドは必要ありません....いくつかは' AlaCarteTotal'をプロパティの代わりにメソッドにするより良いスタイルだと言うかもしれません... –

+2

この ' [リストクーポン{取得;セット;} '' 'とにかくバックアップされたフィールドを持っています(これをしない場合は、コンパイラが行います) – tym32167

+1

トピックをオフにするかもしれませんが、AlaCarteTotalとして見て、何かの存在を確認する)、私はパラメータとしてクーポンを渡し、プロパティからメソッドに変更し、別のクーポンプロパティの必要性を完全に取り除きます。 –

答えて

2

一般的な推奨事項はありません。

コードでローカル変数を使用することがありますが、時間の経過とともに、その値を設定して取得するためのより複雑なワークフローが必要になることがあります。

フィールドがすでに(一般的な)セッターとゲッターでプロパティを持っている場合は、残りのコードに触れることなくgetとsetを編集するだけで簡単に作業できます。

簡潔に:あなたがそれを目的とするまでバッキングフィールドなしで保管してください。とにかくそれをバックグラウンドで作成しますが、ロジックのためにそれらを必要としない場合は、コードがより短く、より短くなります。

この1つは、さらにそれを説明することができます:Properties backing field - What is it good for?

関連する問題