2009-03-02 2 views
1

Предполагая, что у вас есть класс Фото:Лучшее место, чтобы проверить значение свойств

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

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

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

С наилучшими пожеланиями,

+0

Что означает «правильно установить»? Пожалуйста, определите «правильно». –

+0

Установите Правильно, запретите установку недопустимого значения для объекта. Например, «null» для FileExtension –

ответ

2

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

+0

Но не будет ли плохо, если мои сеттеры выбрасывают исключение. –

+0

Если вы собираетесь выбросить исключение, лучше выбросить исключение, как только вы потерпите неудачу (когда вы получите плохие данные), а не позже. – mquander

+0

Разве это не необычно для свойств бросать исключения? –

2

Если только эти варианты, то в свойстве сеттера. Separation of concerns диктует, что Save должен делать сбережения, а не что-либо еще.

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

0

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

0

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

0
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; 
} 
1

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

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

Кроме того, возможно, перед тем, как делать «Сохранить», вы должны проверить, были ли установлены как Title, так и FileExtenstion.

Таким образом, чтобы подвести итог, вам может понадобиться следующие проверки: правильность

  • Check заголовка в: в Title.set
  • правильность
  • Check FileExtension в: в FileExtension.set
  • Убедитесь, что Title.set и Расширение файла.установить, были выполнены: Сохранить
  • Проверить «совместно correcntess» о праве собственности и FileExtesion: Сохранить

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

Смежные вопросы