Jestem w dylemacie. The (zredukowana) zadaniem jest przeprojektowanie danych następujących klasa posiadaczPreferowany sposób ustawiania domyślnych wartości właściwości zerowalnych?
class Stuff
{
public String SomeInfo { get; set; }
}
celu dostosowania popytu że zerowy nie musi być zwrócony. Mogę wymyślić dwa sposoby na osiągnięcie tego i po głębokim rozważeniu 15 minut po prostu nie mogę zdecydować, który z nich ma być preferowany.
Podejście według konstruktora.
class Stuff
{
public String SomeInfo { get; set; }
public Stuff() { SomeInfo = String.Empty; }
}
Podejście według nieruchomości.
class Stuff
{
private String _SomeInfo;
public String SomeInfo
{
get { return _SomeInfo ?? String.Empty; }
set { _SomeInfo = value; }
}
}
Zauważ, że stworzenie Rzeczy przypadkach może być wykonane za pomocą konstruktora a także inicjowania, jeśli to jakiegokolwiek znaczenia. O ile jestem poinformowany, nie będzie żadnych innych ograniczeń (ale wiesz, jak specyfikacje klientów nie zawsze odzwierciedlają rzeczywistość).
Cóż - Twoja pierwsza opcja nie spełnia Twoich wymagań - ponieważ wciąż mogę ustawić właściwość na wartość null. # 2 to twój jedyny prawdziwy wybór. –
Jeśli przez inicjalizację rozumiesz jakąś formę deserializacji, pamiętaj, że niektóre implementacje nie wykonają kodu konstruktora. – Rafal
Innym mniejszym aromatem w punkcie 2 może być sprawdzanie danych wejściowych podczas ustawiania wartości zamiast pobierania. Jeśli zauważysz, że bardzo często pobierasz wartości 'null/Empty', zamiast tego sprawdzasz raz/rzadko, kiedy ustawienie może być preferowane. EDYCJA: Zauważ, że zakłada to, że jesteś wystarczająco czujny, aby nie ustawić pola backing na wartość null. –