Permettez-moi de commencer par dire que ce n'est ni mon code ni celui de mes collègues. Il y a des années, lorsque notre société était plus petite, nous avions certains projets à réaliser dont nous n'avions pas la capacité, ils ont donc été externalisés. Maintenant, je n'ai rien contre l'externalisation ou les entrepreneurs en général, mais la base de code qu'ils ont produite est une masse de fichiers WTF. Cela étant dit, cela fonctionne (généralement), alors je suppose qu'il fait partie des 10% de projets externalisés les plus importants que j'ai vus.
Au fur et à mesure que notre société grandissait, nous avons essayé de prendre davantage en charge notre développement en interne. Ce projet particulier a atterri sur mes genoux, donc je l'ai examiné, nettoyé, ajouté des tests, etc.
Il y a un motif que je vois beaucoup se répéter et il semble tellement époustouflant que je me suis demandé s'il y avait peut-être une raison et que je ne la vois tout simplement pas. Le modèle est un objet sans méthodes ni membres publics, mais simplement un constructeur public qui effectue tout le travail de l'objet.
Par exemple, (le code est en Java, si cela compte, mais j'espère que ce sera une question plus générale):
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 vous vous demandez, ce type de code est souvent appelé de la manière suivante:
for(File f : someListOfFiles) {
new Foo(f);
}
Or, on m'a appris il y a longtemps que les objets instanciés dans une boucle sont généralement une mauvaise idée et que les constructeurs doivent effectuer un minimum de travail. En regardant ce code, il semble qu'il serait préférable de supprimer le constructeur et de créer execute
une méthode statique publique.
J'ai demandé à l'entrepreneur pourquoi cela avait été fait ainsi, et la réponse que j'ai reçue était "Nous pouvons le changer si vous le souhaitez". Ce qui n'était pas vraiment utile.
Quoi qu'il en soit, y a-t-il déjà une raison de faire quelque chose comme cela, dans n'importe quel langage de programmation, ou s'agit-il simplement d'une autre soumission au Daily WTF?
public static void main(string[] args)
et qui ont entendu parler d'objets, puis qui ont essayé de les combiner.