Автореализуемые свойства с ненулевым защитным условием?

Я согласен с мнением Марка Симана о том, что Автоматические свойства в некоторой степени злы , поскольку они нарушают инкапсуляцию. Однако мне нравится лаконичный синтаксис, удобочитаемость и удобство, которые они приносят.

Цитирую:

public string Name { get; set; }

Проблема с кодом фрагмента не в том, что он содержит слишком много церемония. Проблема в том, что он нарушает инкапсуляцию. Фактически

«[…] геттеры и сеттеры не достигают инкапсуляции или информации сокрытие: они представляют собой узаконенный языком способ их нарушения »

Джеймс О. Коплиен и Гертруда Бьёрнвиг. Бережливая архитектура. Вайли. 2010. с. 134.

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

Использование контрактов кода:

private string _username;
public virtual string Username
{
    get { return _username; }
    set 
    {  
        Contract.Requires(value != null);
        _username = value; 
    }
}

Использование vanilla .NET:

private string _username;
public virtual string Username
{
    get { return _username; }
    set 
    {
        if (value == null) throw new ArgumentNullException("Username");
        _username = value; 
    }
}

16
задан Can Gencer 21 July 2011 в 17:31
поделиться