Dove lavoro vedo molte classi che fanno cose del genere:
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 invece methodWithLogic()
in questo modo:
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 propri getter e setter, rende il codice più difficile da leggere. Per me quasi implica che la logica complessa stia accadendo in quel metodo, anche se nel nostro caso non lo è quasi mai. Quando eseguo il debug di un codice non familiare, chi può dire che l'errore non è un qualche effetto collaterale in quel metodo? In altre parole, mi fa fare molti viaggi secondari nel viaggio di comprensione del codice.
Ci sono benefici per il primo metodo? Il primo metodo è effettivamente migliore?