Permítanme introducir esto diciendo que este no es mi código ni el código de mis compañeros de trabajo. Hace años, cuando nuestra empresa era más pequeña, teníamos algunos proyectos que necesitábamos hacer para los que no teníamos capacidad, por lo que se subcontrataron. Ahora, no tengo nada en contra de la contratación externa o los contratistas en general, pero la base de código que produjeron es una masa de WTF. Dicho esto, funciona (principalmente), por lo que supongo que se encuentra en el 10% de los proyectos subcontratados que he visto.
A medida que nuestra empresa ha crecido, hemos tratado de aprovechar más nuestro desarrollo internamente. Este proyecto en particular aterrizó en mi regazo, así que lo he estado revisando, limpiando, agregando pruebas, etc.
Hay un patrón que veo que se repite mucho y parece tan increíblemente horrible que me pregunté si tal vez hay una razón y simplemente no lo veo. El patrón es un objeto sin miembros o métodos públicos, solo un constructor público que hace todo el trabajo del objeto.
Por ejemplo, (el código está en Java, si eso importa, pero espero que sea una pregunta más general):
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
}
}
Si se pregunta, este tipo de código a menudo se llama de la siguiente manera:
for(File f : someListOfFiles) {
new Foo(f);
}
Ahora, me enseñaron hace mucho tiempo que los objetos instanciados en un bucle generalmente son una mala idea, y que los constructores deben hacer un mínimo de trabajo. Al mirar este código, parece que sería mejor soltar el constructor y crear execute
un método estático público.
Le pregunté al contratista por qué se hizo de esta manera, y la respuesta que obtuve fue "Podemos cambiarlo si lo desea". Lo cual no fue realmente útil.
De todos modos, ¿hay alguna razón para hacer algo como esto, en algún lenguaje de programación, o es solo otra presentación al Daily WTF?
public static void main(string[] args)
y han oído hablar de objetos, y luego trataron de combinarlos.