Per spiegare il mio problema, inizierò con un esempio di codice. Immagina questo codice (molto semplificato):
public void entryPoint() {
Foo foo = new Foo();
foo.doSomething()
method1(foo);
}
private void method1(Foo foo) {
// do a lot of stuff before foo is needed again
foo.doSomethingElse();
method2(foo);
}
private void method2(Foo foo) {
// do a lot of stuff before foo is needed again
foo.doAnotherThing();
}
L'oggetto foo
viene creato al livello superiore ed è necessario in più altri metodi nella gerarchia delle chiamate. Attualmente è risolto come sopra e foo
è passato attraverso molti metodi in una gerarchia di chiamate profonde. Penso che questa soluzione sia un po 'maldestra, quindi ho provato a crearne una migliore.
Ecco alcune restrizioni che ho, principalmente a causa del framework in cui mi trovo:
- Non riesco a cambiare la classe
Foo
-
entryPoint()
è un metodo da eseguire più volte -
foo
deve essere un oggetto nuovo ogni volta cheentryPoint()
è chiamato - Non ho il controllo del ciclo di vita degli oggetti che li racchiude, il che significa che non posso creare un nuovo oggetto ogni volta prima che
entryPoint()
sia chiamato - Non posso fare nulla nel costruttore
L'unica alternativa che sono riuscito a ottenere è trasformare foo
in un campo. Ma in questo caso l'ambito di foo
è un po 'più oscuro, che lo apre per errori di programmazione relativi alla terza restrizione.
Qualcuno ha qualche consiglio su questo? C'è una soluzione che non ho ancora considerato?