Mi piacerebbe avere la tua opinione su quanto lontano andare con setter senza effetti collaterali.Approccio ai setter senza effetti collaterali
consideri il seguente esempio:
Activity activity;
activity.Start = "2010-01-01";
activity.Duration = "10 days"; // sets Finish property to "2010-01-10"
noti che i valori per data e durata sono mostrati solo a titolo indicativo.
Quindi, utilizzando setter per qualsiasi proprietà Start
, Finish
e Duration
saranno pertanto modificare altre proprietà e quindi non può essere considerato indenne effetto collaterale-. Lo stesso vale per le istanze della classe Rectangle
, dove setter per X
sta modificando i valori di Top
e Bottom
e così via.
La domanda è dove si dovrebbe tracciare una linea tra l'utilizzo di setter, che hanno effetti collaterali di modifica dei valori di proprietà correlate logicamente e l'utilizzo di metodi, che tuttavia non potrebbero essere molto più descrittivi. Ad esempio, la definizione di un metodo chiamato SetDurationTo(Duration duration)
non riflette neanche l'inizio o la fine della modifica.
Grazie, questo è quello che stavo cercando e non mi viene mai in mente l'effetto collaterale -sempre libero "in realtà non è possibile in quanto cambierà lo stato. E come hai sottolineato, il CLR tradurrà comunque il metodo. – Martin
Sì, l'effetto collaterale di un setter è impostare * la variabile membro a cui si riferisce *.Ma un ulteriore effetto collaterale è quello di modificare * altre * variabili membro. –
Stavo pensando alla stessa cosa e direi che l'impostazione della variabile membro non è un effetto collaterale, ma l'effetto desiderato del setter. Il cambio di altre variabili membro è un effetto collaterale. – Martin