Lassen Sie mich dies vorwegnehmen, indem Sie sagen, dass dies weder mein Code noch der Code meiner Mitarbeiter ist. Vor Jahren, als unser Unternehmen noch kleiner war, mussten wir einige Projekte durchführen, für die wir nicht die Kapazität hatten, sodass sie ausgelagert wurden. Jetzt habe ich nichts gegen Outsourcing oder Auftragnehmer im Allgemeinen, aber die Codebasis, die sie produzierten, ist eine Masse von WTFs. Davon abgesehen funktioniert es (meistens), also schätze ich, dass es in den Top 10% der ausgelagerten Projekte liegt, die ich gesehen habe.
Da unser Unternehmen gewachsen ist, haben wir versucht, mehr von unserer Entwicklung in Eigenregie zu übernehmen. Dieses spezielle Projekt ist in meinem Schoß gelandet, also habe ich es durchgesehen, aufgeräumt, Tests hinzugefügt usw. usw.
Es gibt ein Muster, das sich oft wiederholt, und es scheint so überwältigend schrecklich, dass ich mich gefragt habe, ob es vielleicht einen Grund gibt und ich es einfach nicht sehe. Das Muster ist ein Objekt ohne öffentliche Methoden oder Member, nur ein öffentlicher Konstruktor, der die gesamte Arbeit des Objekts erledigt.
Zum Beispiel (der Code ist in Java, wenn das wichtig ist, aber ich hoffe, dass dies eine allgemeinere Frage ist):
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
}
}
Wenn Sie sich fragen, wird diese Art von Code häufig folgendermaßen aufgerufen:
for(File f : someListOfFiles) {
new Foo(f);
}
Nun wurde mir vor langer Zeit beigebracht, dass instanziierte Objekte in einer Schleife im Allgemeinen eine schlechte Idee sind und dass Konstruktoren ein Minimum an Arbeit leisten sollten. Wenn Sie sich diesen Code ansehen, ist es besser, den Konstruktor zu löschen und execute
eine öffentliche statische Methode zu erstellen .
Ich habe den Auftragnehmer gefragt, warum es so gemacht wurde, und die Antwort lautete: "Wir können es ändern, wenn Sie wollen." Welches war nicht wirklich hilfreich.
Wie auch immer, gibt es jemals einen Grund, so etwas in irgendeiner Programmiersprache zu tun, oder ist dies nur eine weitere Einreichung beim Daily WTF?
public static void main(string[] args)
Objekte Bescheid wissen und von diesen gehört haben, und dann versuchten, sie miteinander zu vermischen.