Frage

Sicher haben einige von Ihnen mit diesem behandelt. Es neigt zu geschehen, wenn Programmierer ein wenig bekommen auch von OO genommen und vergessen über die Leistung und mit einer Datenbank.

Ein Beispiel können sagen, dass wir eine E-Mail-Tabelle haben, und sie müssen dieses Programm gesendet werden. Bei der Inbetriebnahme, sieht es für alles, was gesendet werden muss, wie folgt:

Emails = find_every_damn_email_in_the_database();
FOR Email in Emails
  IF !Email.IsSent() THEN Email.Send()

Dies ist ein gute von einer do-not-repeat-yourself-Perspektive, aber manchmal ist es unvermeidlich, und es sollte sein:

Emails = find_unsent_emails();
FOR Email in Emails
  Email.Send()

Gibt es einen Namen dieses einen?

War es hilfreich?

Lösung

Ich werde gehen an ihm haben und den Namen „die faulen Filter (Anti) Muster“ Münze.

Andere Tipps

Ich sah einmal, dass. Das Programmierer war nicht herum zu lang.

Wir riefen, dass die "Firehose-Methode".

Für mich ist es Joel Spolsky undichte Abstraktion .

Es ist nicht gerade ein Anti-Muster, aber wer auch immer diesen Code geschrieben hat, hat in dem Active Record Abstraktion Lecks nicht wirklich verstehen.

Ich nenne das "The Shotgun Approach".

Ich bin mir nicht sicher, dass dies notwendigerweise Datenbank bezogen, da Sie ein komplexes und teures Verfahren haben könnte (zum Beispiel mehr als ein Flag) für einen Filter für eine Gruppe angewendet wird.

Ich glaube nicht, es gibt einen Namen zu, da das erste Design einfach nicht gut, und es verstößt gegen das Ein-Verantwortung-only-Prinzip. Wenn Sie suchen, filtern und drucken das gefilterte Sie mehrere Dinge tun, so dass Sie es in „gesucht gefiltert“ Refactoring benötigen und drucken.

Das einzige, was anders als ein einfaches Refactoring hier ist, dass es auch die Leistung auswirkt auf die gleiche Art und Weise, dass inneren Schleifen kann in einer Weise ausgelegt werden, die die Leistung beeinträchtigen.

aus dem folgende anti-Muster abgeleitet zu haben:

Der ursprüngliche Entwickler möglicherweise wurde nicht erlaubt, die find_unsent_emails () -Implementierung zu schreiben und damit die Kleinst-Funktion wieder verwendet habe. Und dann, warum es nach der Entwicklung und Erprobung ändern?

Dies ist häufig aufgrund es viel einfacher ist, eine vorhandene Abfrage zu verwenden und dann in Code Filterung als hinzugefügt eine neue SQL-Abfrage zu bekommen. Vielleicht, weil die DBAs alle Abfragen steuern und eine neue Abfrage genehmigt bekommen dauert Tage, oder vielleicht, weil das ORM-Tool Sie verwenden macht es sehr schwierig, Ihre eigenen benutzerdefinierten Abfragen zu definieren.

Wenn ich es zu nennen wäre, würde ich es nennen das „Easy Way Out“ (anti) Muster. Ob es sich um ein Antipattern ist oder nicht wirklich hängt von der individuellen Situation. Wenn es immer eine ziemlich kleine Anzahl von Elementen, die Sie abrufen müssen, die Filterung in Code tun, ist wirklich kein großes Problem. Aber wenn die Anzahl der Elemente groß ist und hat das Potenzial, kontinuierlich zu wachsen, so ist offenbar die Filterung sollte auf dem Server durchgeführt werden.

Ich habe an anderer Stelle ähnliche Probleme gesehen, wo anstelle einer einfachen Anordnung von Dingen zu tun, gibt es eine „Transaktion Cluster“ wurde auf der Grundlage einer „Liste Cluster“ auf der Grundlage einer „Sammlung Cluster“ basiert auf einem „Memory Cluster“ . Unnötig zu sagen, drehte die einfachste Sache in ein großes großes freakin Geschäft.

Ich nannte es galoppierenden Allgemeinheit .

Stoopid Amateure.

Im Ernst, ich habe nur diese eine bei Menschen mit Computer Science Grad und keine Berufserfahrung überhaupt gesehen. Als ich an der Duke lehrte, mein Berater und ich lief Klasse eine „Large Scale-Programmierung“, wo wir Menschen genau diese Art von Fehlern aussehen.

Die Leistung des ersten kann man eigentlich in Ordnung sein, je nach Art des Emails. Wenn es nur ein Iterator (man denke an std::vector::begin() in C++), dann ist es in Ordnung und besser als alle noch nicht gesendeten E-Mails in einem gewissen Behälter Speichern erster.

Diese Antipattern hat mehrere mögliche Namen.

  • "Keine-Know-SQL" Antipattern
  • "Fascist-DBA" Antipattern
  • "Was-Ist-'latency'-mean?" Antipattern

Es gibt ein schönes Beispiel unter The Daily WTF .

Inspired teilweise von 1800 "lazy der Filter (anti) Muster", wie etwa "dysfunktionale Programmierung" (dh das Gegenteil von funktionaler Programmierung)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top