クラス内で計算されたものを書くための優れたパフォーマンスと読みやすさの方法が見つかりません。次のクラスと、FinalPrice を取得するすべての方法を想像してください。
public class Order {
public Order(Product[] products) {
Items = products;
オプション 1: 計算したい各プロパティの変数宣言を持つこと、恐ろしい可読性
var orderPrice = products.Sum(p => p.Price * p.Quantity);
var orderTaxes = products.Sum(p => p.Taxes * p.Quantity);
var orderDiscount = products.Sum(p => p.Price * p.Quantity * p.Discount);
OrderPrice = orderPrice;
OrderTaxes = orderTaxes;
OrderDiscount = orderDiscount;
FinalPrice = orderPrice + orderTaxes - orderDiscount;
オプション 2: クラスでの順序の問題が問題になります。FinalPrice ラインを他のラインより前にすることはできません。そうしないと機能しませんが、エラーはスローされません。
OrderPrice = products.Sum(p => p.Price * p.Quantity);
OrderTaxes = products.Sum(p => p.Taxes * p.Quantity);
OrderDiscount = products.Sum(p=> p.Price * p.Quantity * p.Discount);
FinalPrice = OrderPrice + OrderTaxes - OrderDiscount;
オプション 3: すべての式を書き直す - メンテナンスに悪い。後で価格の違いを導入する可能性が最も高い.
FinalPrice = products.Sum(p => p.Price * p.Quantity) +
products.Sum(p => p.Taxes * p.Quantity) -
products.Sum(p => p.Price * p.Quantity * p.Discount);
}
オプション 4: ゲッターの使用。これは呼び出されるたびに計算されます。これは単純な計算ですが、より多くのコードが重く想定されています。
public decimal FinalPrice { get {
return OrderPrice + OrderTaxes - OrderDiscount;
} }
}
オプション 5: 関数を使用します。これは良いことか悪いことか??
public decimal CalculateFinalPrice() {
return OrderPrice + OrderTaxes - OrderDiscount;
}