Вы кладете свои расчеты на свои наборы или ваши доходы. - PullRequest
9 голосов
/ 15 января 2009

что лучше ???

public class Order
{
   private double _price;
   private double _quantity;

  public double TotalCash
  {      
   get
   {
    return _price * _quantity;
   }
}

или

public class Order
{

   private double _totalCash;
   private double _price;
   private double _quantity;

  private void CalcCashTotal()
 {
   _totalCash = _price * _quantity
 }

  public double Price
  {      
   set
   {
     _price = value;
     CalcCashTotal();
   }
  }

  public double Quantity
  {      
   set
   {
     _price = value;
     CalcCashTotal();
   }
  }


  public double TotalCash
  {      
   get
   {
    return _totalCash;
   }
}

Ответы [ 13 ]

0 голосов
/ 06 июля 2010

Мое правило, и я рекомендую это всем:

Методы = с побочными эффектами Получатели = без побочных эффектов (ЗАПРЕЩАЕТСЯ запоминание - что разрешено и в получателях)

0 голосов
/ 15 января 2009

Я бы пошел с подходом к выполнению вычислений в геттере для TotalCash, потому что меньше кода почти всегда лучше. Это также гарантирует, что значение TotalCash всегда правильно. В качестве надуманного примера, если у вас был другой метод NewOrder (Price, Qty) и вы забыли вызвать CalculateTotal в конце этого метода, вы могли бы очень легко получить неправильное значение для TotalCash.

Вычисление этого в установщике может быть лучше, если вычисление требует времени для обработки, а изменение значений только одного или двух свойств потребует пересчета, но почти всегда лучше использовать подход, который оставляет меньше места для ошибки, даже если это займет немного больше времени.

0 голосов
/ 15 января 2009

Я положу расчет на получение или набор только для чтения.

Я считаю, что свойство должно вести себя так, как будто оно имеет вспомогательную переменную.

Мне не нравятся вычисления, которые долго читаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...