Recentemente sono stato gettato in un progetto di applicazione Web Java e ho incontrato un certo numero di classi che seguono questo tipo di formato:
public class MyThingy {
private final int p1;
private final String p2;
…
public MyThingy (int p1, String p2, …) {
this.p1 = p1;
this.p2 = p2;
…
}
public static void doSomething(int p1, String p2, …) throws Throwable {
final MyThingy myThingy = new MyThingy(p1, p2, …);
myThingy.execute();
}
private void execute() throws Throwable {
//do stuff
}
}
Sembra che questo potrebbe essere realizzato con il seguente codice, che per me sembra molto più facile da leggere.
public class MyThingy {
public static void doSomething (int p1, String p2, …) throws Throwable {
//do stuff
}
}
L'unico vantaggio possibile che posso vedere dal farlo è che se dovessi suddividere execute () in pezzi più piccoli, tutti potrebbero condividere i parametri iniziali senza doverli esplicitamente passare in giro. Ma questo forse giova al codificatore pigro, poiché diventa difficile per il lettore dire quali metodi hanno bisogno di quali parametri e quando i valori possono essere cambiati (come le variabili globali).
C'è qualcosa che mi manca? Threading, performance?
Modifica: Avrei dovuto menzionare, anche se il costruttore è pubblico, non viene chiamato. L'unico utilizzo è il seguente:
MyThingy.doSomething(p1, p2...);
A parte questo, di per sé problematico per i test, non vedo alcun motivo per non mettere la logica di execute () direttamente in doSomething (). Anche se dovessimo sbarazzarci della funzione statica, il costruttore non ha ancora senso per me; Penso che i parametri dovrebbero essere passati direttamente al metodo che li utilizzerà.