Permitam-me que antecipe dizendo que este não é o meu código nem o código dos meus colegas de trabalho. Anos atrás, quando nossa empresa era menor, tínhamos alguns projetos que precisávamos realizar e que não tínhamos capacidade para, portanto eles eram terceirizados. Agora, não tenho nada contra terceirização ou contratados em geral, mas a base de código que eles produziram é uma massa de WTFs. Dito isto, ele funciona (principalmente), então suponho que esteja entre os 10% dos projetos terceirizados que já vi.
À medida que nossa empresa cresce, tentamos levar mais do nosso desenvolvimento internamente. Esse projeto em particular caiu no meu colo, então eu o reparei, limpei, adicionei testes, etc.
Há um padrão que vejo repetido muito e parece tão terrivelmente horrível que me perguntei se talvez houvesse um motivo e simplesmente não o vi. O padrão é um objeto sem métodos ou membros públicos, apenas um construtor público que faz todo o trabalho do objeto.
Por exemplo, (o código está em Java, se isso importa, mas espero que seja uma pergunta mais geral):
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 você está se perguntando, esse tipo de código geralmente é chamado da seguinte maneira:
for(File f : someListOfFiles) {
new Foo(f);
}
Agora, fui ensinado há muito tempo que os objetos instanciados em um loop geralmente são uma má idéia e que os construtores devem fazer um trabalho mínimo. Olhando para este código, parece que seria melhor descartar o construtor e criar execute
um método público estático.
Perguntei ao empreiteiro por que isso foi feito dessa maneira, e a resposta que tive foi "Podemos mudar, se você quiser". O que não foi realmente útil.
De qualquer forma, existe alguma razão para fazer algo assim, em qualquer linguagem de programação, ou é apenas mais uma submissão ao Daily WTF?
public static void main(string[] args)
e ouviram falar de objetos e depois tentaram misturá-los.