Recentemente ho avuto una discussione con un collega sull'uso dei getter (senza setter) in classi del modello di visualizzazione usate da XAML.
Esempio:
public string FullName
{
get
{
return $"{FirstName} {LastName}";
}
}
//call OnPropertyChanged("FullName") when setting FirstName or LastName
Il suo argomento era che dovresti sempre creare coppie get / set che usano un campo privato (con il setter che solleva l'evento PropertyChanged
se il valore è stato effettivamente cambiato).
Esempio:
private string _fullName;
public string FullName
{
get
{
return _fullName;
}
set
{
if (value != _fullName)
{
_fullName = value;
OnPropertyChanged("FullName");
}
}
}
//Set FullName when setting FirstName or LastName
Io, d'altra parte, penso che sia corretto utilizzare i getter (che calcolano l'output al volo), a condizione che non vengano aggiornati continuamente tramite troppe chiamate PropertyChanged
.
Non penso che i miei colleghi si avvicinino è male - penso che sia un lavoro molto più impegnativo che potrebbe semplicemente non essere necessario. Comunque era sicuro che il mio approccio fosse negativo e andrebbe evitato a tutti i costi.
Come esempio opposto, ho sottolineato che la classe base MVVM di DevExpress ha i metodi RaisePropertyChanged
e RaisePropertiesChanged
(per l'aggiornamento di più proprietà) pronti per l'uso - entrambi i quali non sarebbero necessari se tutte le proprietà fossero ottenute / set (la classe base di DevExpress espone anche un metodo SetProperty
per l'uso in setter, che include anche una chiamata PropertyChanged
). La sua argomentazione era che "beh, la gente è testarda, continua a sbagliare, quindi DevExpress ha semplicemente aggiunto quei metodi per assicurarsi che le persone siano felici", che ho trovato ... strano, per non dire altro.
Quindi, qual è il risultato qui? È un cattivo progetto utilizzare i getter nei modelli di visualizzazione progettati per essere utilizzati da XAML?
EDIT: Ho dimenticato di menzionare ... il mio collega ha anche affermato che usare coppie get / set sarà sempre più veloce. Questo sembra essere vero per quanto riguarda l'aggiornamento dell'interfaccia utente, ma ha anche usato questo argomento come argomento che i getter non dovrebbero mai essere usati. L'intera discussione è iniziata quando ho avuto un po 'di problemi di prestazioni quando ho popolato una griglia di dati con più file (cioè 12k) in cui la mia VM ha utilizzato un discreto numero di getters ...