Nello sviluppo di un domain model capita di avere la necessità di implementare proprietà readonly che non sono sempre readonly.
Mi spiego con un esempio: una classe Ordine può ha la proprietà DataSpedizione che è modificabile (get/set) fino al momento in cui lo stato dell'ordine non è "Spedito", da quel momento la proprietà DataSpedizione dovrà essere non modificabile (solo get).
Vedo spesso questa logica messa sull'interfaccia utente abilitando e disabilitando i controlli necessari alla modifica. Se da un lato tale approccio ci sta bene, dall'altro ritengo che non possa mancare un controllo sull'oggetto Ordine stesso che come è giusto che sia è quello che sa "come funzionano gli Ordini".
Quindi mi piace aggiungere questo genere di controlli sul setter della proprietà, una cosa del tipo
public class Ordine
{
public DateTime DataSpedizione
{
get { return _dataSpedizione; }
set
{
if (this.Stato != StatiOrdine.Spedito)
_dataSpedizione = value;
else
throw new MyException("Cannot set value...");
}
}
}