Dove lavoro vedo molte classi che fanno cose come questa:
public class ClassThatCallsItsOwnGettersAndSetters {
private String field;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public void methodWithLogic() {
setField("value");
//do stuff
String localField = getField();
//do stuff with "localField"
}
}
Se avessi scritto questo da zero, avrei scritto methodWithLogic()
come questo invece:
public class ClassThatUsesItsOwnFields {
private String field;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public void methodWithLogic() {
field = "value";
//do stuff
//do stuff with "field"
}
}
Sento che quando la classe chiama i suoi getter e setter, rende il codice più difficile da leggere. Per me quasi implica che in quella chiamata di metodo sta accadendo una logica complessa, anche se nel nostro caso non lo è quasi mai. Quando eseguo il debug di un codice sconosciuto, chi può dire che il bug non è un effetto collaterale in quel metodo? In altre parole, mi fa fare molti viaggi secondari nel viaggio di comprensione del codice.
Ci sono vantaggi per il primo metodo? Il primo metodo è effettivamente migliore?