Um der Suppe eine weitere Metapher hinzuzufügen, sind Entwurfsmuster Clippy, der Microsoft Office-Helfer. "Sie tun anscheinend dasselbe mit einer ganzen Reihe von Dingen. Kann ich Ihnen dabei helfen, indem ich Ihnen Iterator oder Besucher anbiete?"
Eine gute Beschreibung dieser Muster zeigt an, wann es nützlich ist, etwas so zu machen, wie es schon oft gemacht wurde, welche Fehler Sie beim ersten Versuch machen und welche gängigen Methoden gefunden wurden, um diese Fehler zu vermeiden . Sie lesen das Entwurfsmuster (oder überprüfen es aus dem Speicher) und können dann mit Ihrer Arbeit fortfahren. Was Sie nicht tun können, ist, nur mit Clippy und Assistenten auszukommen.
Unerfahrene Menschen können Fehler machen und Code schreiben, der die Realität nicht berücksichtigt, wenn sie glauben, dass ihre Liste der Entwurfsmuster eine vollständige Liste aller möglichen Ansätze zur Lösung von Problemen in der Software ist, und versuchen, Code durch Verknüpfen von Entwurf zu entwerfen Muster, bis es fertig ist. Eine andere schlechte Taktik, die in der Natur beobachtet wird, besteht darin, ein Designmuster in eine Situation zu hupen, für die es nicht wirklich geeignet ist, auf der Grundlage, dass das Designmuster "Best Practice" ist. Nein, es kann für die Klasse von Problemen, die es tatsächlich löst , die beste Praxis sein oder nicht , aber es ist sicherlich nicht die beste Praxis für Probleme, die es nicht löst, oder für Probleme, die es nur löst, indem es unnötige Komplexität einführt, wenn es eine einfachere Lösung gibt .
Natürlich ist es auch möglich, dass jemand ein Muster auf der Grundlage von YAGNI vermeidet, erkennt, dass er es benötigt, und tastet nach der normalen Lösung. Dies ist in der Regel (aber nicht immer) schlimmer, als die Anforderung von Anfang an zu realisieren. Deshalb ist es auch in einer agilen Entwicklung frustrierend, wenn vollständig vorhersehbare Anforderungen nicht frühzeitig erkannt werden. Ich kann nicht der einzige C ++ - Programmierer gewesen sein, der sehr amüsiert war, dass Java generische Container anfangs als unnötig komplex zurückwies und sie später wieder anschloss.
Es ist also mit ziemlicher Sicherheit ein Fehler, das Schreiben eines Iterators grundsätzlich zu vermeiden, da Sie Entwurfsmuster lieber vermeiden.
Das Hinzufügen eines neuen Felds zur Benutzeroberfläche / Datenbank / Datenebene dauert 2-3 Stunden, wobei es wie in seinem Code 30 Minuten dauert.
Dem kann man nicht wirklich widersprechen: Durch diese Metrik ist sein Design weitaus besser als das der anderen. Ob das daran liegt, dass er Designmuster vermieden hat, ist fraglich, ich denke, es ist wahrscheinlicher, weil er die richtigen "realen" Probleme beim Entwerfen berücksichtigte und mit dem Vorteil der Erfahrung besser in seinem Job ist als jemand, der nur mit einem Lehrbuch und bewaffnet ist hohe Ideale.
Daher erkannte er, dass jedes Muster, bei dem Sie zum Hinzufügen eines Felds viele verschiedene Punkte im Code berühren müssen, ein schlechtes Muster für den Job ist. "Machen Sie das Hinzufügen von Feldern einfach", und er hat diese Muster nicht verwendet. Layer-Architekturen können in der Tat darunter leiden, und es ist falsch, Entwurfsmuster zu verwenden, ohne deren Nachteile zu berücksichtigen.
Wie lange dauert es dagegen, eine neue Benutzeroberfläche in seinem Design zu schreiben, und wie lange dauert es in einer geschichteten Architektur? Wenn das Projekt ihn dazu aufforderte, ständig neue Benutzeroberflächen über ein festes Datenmodell zu erstellen und bereitzustellen, anstatt ständig Felder hinzuzufügen, hätte er hoffentlich stattdessen dafür entworfen. Oder auch. Bei all seinen Vorteilen heißt es jedoch leider nicht, dass Sie nie wieder einen Kompromiss eingehen müssen, wenn Sie sagen, dass wir agil sind!
Die Auswahl aus einem Menü mit Designmustern kann Sie sicherlich davon abhalten, über die wichtigsten Aspekte nachzudenken. Das Erkennen, wann Sie einen Besucher schreiben, und das Dokumentieren oder Benennen als "Besucher", um den Lesern einen schnellen Zugriff zu ermöglichen, steht jedoch nichts im Wege. "Das ist ein Besucher" zu schreiben, anstatt es richtig zu dokumentieren, ist ein schrecklicher Fehler, aus dem Grund, den Ihr leitender Entwickler angibt - Programmierer werden es nicht verstehen. Selbst Programmierer, die wissen, was ein Besucher ist, benötigen mehr Informationen als nur "das ist ein Besucher".