Лучшее место для проверки стоимости недвижимости - PullRequest
1 голос
/ 02 марта 2009

Предположим, у вас есть класс Фото:

class Photo
{
  public string Title {get; set;}
  public string FileExtension {get; set;}
  public void Save() 
  { 
    // Save to backing store here 
  }
}

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

Редактировать: Что, если это метод обновления? Если фотографии добавляются через PhotoManager с использованием метода, подобного PhotoManager.Add (Photo p), то это лучшее место для проверки.

С уважением,

Ответы [ 6 ]

2 голосов
/ 02 марта 2009

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

2 голосов
/ 02 марта 2009

Если это единственные параметры, то в установщике свойств. Разделение интересов диктует, что Save должен делать экономию, а не что-либо еще.

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

1 голос
/ 02 марта 2009

Это зависит от того, когда у вас достаточно данных для проверки правильности: если правильность FileExtension не зависит от значения Title, а правильность Title не зависит от значения FileExtension, вы можете проверить каждый из их внутри сеттеров.

Но если один из них зависит от значения другого, и вы не знаете, в каком порядке будут выполняться сеттеры, вы должны проверять Title и FileExtension только тогда, когда вы получаете их оба. Это может быть в Save или в каком-то новом методе Check.

Также, возможно, перед выполнением сохранения вы должны проверить, были ли установлены и заголовок, и FileExtenstion.

Итак, для подведения итогов вам могут потребоваться следующие проверки:

  • Проверьте правильность заголовка: в Title.set
  • Проверьте правильность FileExtension: в FileExtension.set
  • Убедитесь, что Title.set и FileExtension.set были выполнены: в Save
  • Проверьте "совместимость" заголовка и FileExtesion: в Save

Относительно метода обновления : Я понимаю, что вы получаете объект Photo с уже установленными Title и FileExtenstion. В этом случае вы должны решить, доверяете ли вы тому, что Title и FileExtension уже были проверены на фотографии тем, кто их установил. Если вы доверяете этому, вам не нужно ничего менять в моем предложении выше. Но если вы не доверяете, то вы также должны проверить правильность Title и правильность FileExtension в Save (или, опять же, в каком-то новом методе Check).

0 голосов
/ 02 марта 2009
public void Save()
{
  try
  {
    // saving
  }
  catch(Exception ex)
  {
    MessageBox(ex.Message); // roughly
  }
}

или

public void Save()
{
  if(!IsDataValid) // !(String.IsNullOrEmpty(this.Title) && String.IsNullOrEmpty(this.Extension))
  {
    throw new Exception(); //in fact you need to throw something more concrete
  }
  // saving
}

Также я мог бы использовать:

public string Title { get; private set; }

public string Extension { get; private set; }

public Photo(string title, string extension)
{
  this.Title = title;
  this.Extension = extension;
}
0 голосов
/ 02 марта 2009

Если я правильно понимаю ваш вопрос, вы можете сделать как простой метод private boolean Validate(title, fileExtension), вызываемый из метода settor, так и методы хранения. Если эта проверка ложна, вы можете бросить Exception и разобраться с этим оттуда.

0 голосов
/ 02 марта 2009

Трудно сказать с такой маленькой детализацией. Если вы считаете допустимым, что объект находится в недопустимом состоянии во время его обновления, я бы сказал, что вы должны выполнить проверку в методе Save.

...