Consentitemi di prefigurarlo 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 per i quali non avevamo la capacità, quindi erano esternalizzati. Ora, non ho nulla contro l'outsourcing o gli appaltatori in generale, ma la base di codice che hanno prodotto è una massa di WTF. Detto questo, funziona (principalmente), quindi suppongo sia tra i primi 10% dei progetti in outsourcing che ho visto.
Man mano che la nostra azienda è cresciuta, abbiamo cercato di sfruttare maggiormente il nostro sviluppo interno. Questo particolare progetto è atterrato sulle mie ginocchia, quindi l'ho ripassato, ripulito, aggiunto test, ecc. Ecc.
C'è un modello che vedo ripetuto molto e sembra così terribilmente terribile che mi chiedevo se forse c'è una ragione e semplicemente non la vedo. Il modello è un oggetto senza metodi o membri pubblici, solo un costruttore pubblico che svolge 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 eliminare il costruttore e creare 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 lo desideri". Che non è stato davvero utile.
Ad ogni modo, c'è mai un motivo per fare qualcosa del genere, in qualsiasi linguaggio di programmazione, o è solo un'altra presentazione del Daily WTF?
public static void main(string[] args)
e hanno sentito parlare di oggetti, quindi hanno cercato di mescolarli insieme.