Consentitemi di premettere questo 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, 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 ho dovuto esaminarlo, ripulirlo, aggiungere test, 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 modello è 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 del genere, in qualsiasi linguaggio di programmazione, o è solo un'altra sottomissione al Daily WTF?