Semplificato un po ', ho questo codice:
public class TaskProcessCases{
private Assessment assessment ;
public void execute() { // the actual name
for (Case case : cases) {
assessment = new Assessment();
// some more code (which a.o. sets 'id')
retrieveData(id); // the actual name
if (assessment.getMyField() == null) {
reopen();
}
// some more code
}
}
private void retrieveData(int id) {
// some more code which uses 'id'
assessment.setMyField(Integer.valueOf(42)); // just example
}
}
public class Assessment {
Integer myField;
public Integer getMyField() { return myField; }
public void setMyField(Integer myField) { this.myField = myField; }
}
Il mio problema con questo è che leggendo execute
, devo controllare tutti i metodi chiamati (come retrieveData
) per sapere dove è cambiato assessment
.
È questo il modo giusto per scrivere questo?
Devo passare assessment
a retrieveData
come retrieveData(assessment )
per renderlo più esplicito? Dovrebbe retrieveData
essere un metodo di assessment
? Con aiuto ho pensato Potrei inizializzare tutto nel costruttore e rendere la classe immutabile, che è ottima, ma piuttosto invadente.
EDIT : il mio scopo è quello di avere un codice leggibile da un programmatore tipico, che non inviti a formulare ipotesi errate e che abbia pochi modi per essere usato / modificato in modo errato. Piccole differenze nelle prestazioni non contano qui.
EDIT : ho reso il codice più specifico. Ecco la vecchia versione su cui si basavano le prime risposte:
class Alpha {
Beta inst;
void doThing() {
inst = new Beta();
// some more code
fill();
// some more code
inst.getMyField();
}
void fill() {
// some more code
inst.setMyField(Integer.valueOf(42));
}
}
class Beta {
Integer myField;
public Integer getMyField() { return myField; }
public void setMyField(Integer myField) { this.myField = myField; }
}