Consentitemi di prefigurare ciò dicendo che questo non è il mio codice né il codice dei miei colleghi. Anni fa, quando la nostra azienda era più piccola, avevamo alcuni progetti di cui avevamo bisogno e di cui non avevamo la capacità, quindi sono stati esternalizzati. Ora, non ho nulla contro l'outsourcing o gli appaltatori in generale, ma il codice base che hanno prodotto è una massa di WTF. Detto questo, funziona (soprattutto), quindi suppongo che sia nella top 10% dei progetti in outsourcing che ho visto.
Poiché la nostra azienda è cresciuta, abbiamo cercato di portare più del nostro sviluppo in casa. Questo particolare progetto mi è caduto sulle ginocchia, quindi l'ho esaminato, ripulito, aggiungendo test, ecc. Ecc.
C'è un modello che vedo ripetuto molto e sembra così terribilmente terribile che mi sono chiesto se forse c'è una ragione e io semplicemente non la vedo. Il pattern è un oggetto senza metodi o membri pubblici, solo un costruttore pubblico che fa tutto il lavoro dell'oggetto.
Ad esempio, (il codice è in Java, se è importante, ma spero che questa sia una domanda più generale):
public class Foo {
private int bar;
private String baz;
public Foo(File f) {
execute(f);
}
private void execute(File f) {
// FTP the file to some hardcoded location,
// or parse the file and commit to the database, or whatever
}
}
Se ti stai chiedendo, questo tipo di codice viene spesso chiamato nel modo seguente:
for(File f : someListOfFiles) {
new Foo(f);
}
Ora, mi è stato insegnato molto tempo fa che gli oggetti istanziati in un ciclo sono generalmente una cattiva idea e che i costruttori dovrebbero fare un minimo di lavoro. Guardando questo codice sembra che sarebbe meglio abbandonare il costruttore e rendere execute
un metodo statico pubblico.
Ho chiesto all'appaltatore perché è stato fatto in questo modo, e la risposta che ho ricevuto è stata "Possiamo cambiarlo se vuoi". Il che non è stato di grande aiuto.
Ad ogni modo, c'è sempre un motivo per fare qualcosa di simile, in qualsiasi linguaggio di programmazione, o è solo un'altra sottomissione al Daily WTF?