Monday, November 22, 2010

Методы или свойства

Проще всего применять такую концепцию: методы определяют действия, а свойства определяют данные. Желательно, чтобы при чтении свойств не происходило дополнительных действий, тем более “тяжеловесных”.

Не определяйте свойств “только для записи”. Если свойство извне класса должно только устанавливаться, то сделайте метод. Например, класс пользователей

public class User
{
  public Int64 Id {get; set;}
  public string Name {get; set;}
  public string Email {get; set;}
}

Пусть в базе данных есть еще поле IsDeleted, определяющее удалена запись или нет. В классе User эта запись нам, в общем-то, не нужна – удаленных пользователей мы просто не читаем из базы. В этом случае делать свойство смысла нет и правильный вариант – реализовать метод SetDeletedFlag(Id) или просто метод DeleteUser(Id).
Если же удаленные записи пользователей мы показываем, то класс будет такой:
public class User
{
  public Int64 Id {get; set;}
  public string Name {get; set;}
  public string Email {get; set;}
  public bool IsDeleted {get; set;}
}

Вопрос только как будет реализована логика удаления, да и вообще обновления записей пользователей. Возможно, это будет специальный класс UserDAL, работающий с такими записями и имеющий метод DeleteUser(User) или DeleteUser(Id). Но, в любом варианте, свойства всего лишь устанавливают соответствующие поля класса, но не выполняют действий.

No comments: