Ich habe "Coders at Work" gelesen und festgestellt, dass einige der in dem Buch interviewten Fachleute nicht so begeistert von Designmustern sind.
Ich denke, dass es zwei Hauptgründe dafür gibt:
Designmuster zwingen uns, in ihren Begriffen zu denken. Mit anderen Worten, es ist fast unmöglich, etwas Neues (vielleicht sogar Besseres) zu erfinden.
Entwurfsmuster halten nicht ewig. Sprachen und Technologien ändern sich schnell. Daher werden Entwurfsmuster irgendwann irrelevant.
Vielleicht ist es wichtiger zu lernen, wie man ohne bestimmte Muster richtig programmiert und sie nicht lernt.
Der Punkt war auch, dass Menschen, die normalerweise mit einem Problem konfrontiert sind und nicht viel Zeit haben, versuchen, ein Muster zu verwenden. Dies bedeutet, dass Sie vorhandenen Code mit geringfügigen Änderungen kopieren und in Ihr Projekt einfügen müssen, damit er funktioniert. Wenn es Zeit ist, etwas zu ändern oder hinzuzufügen, weiß ein Entwickler nicht, wo er anfangen soll, weil es nicht sein Code ist und er nicht tief mit ihm vertraut ist.
quelle
Antworten:
Ich denke, für mein Geld fehlt jedem der Sinn von Designmustern. Es kommt selten vor, dass ich mich frage, welches Muster ich in einer bestimmten Situation verwenden soll. Außerdem habe ich die meisten dieser Muster verwendet, lange bevor ich wusste, dass sie Namen hatten.
Die Kraft von Designmustern liegt in der Kommunikation. Es ist für mich viel schneller zu sagen, "benutze eine Strategie dafür", als im Detail zu beschreiben, was ich vorschlage. Es ist für uns viel einfacher, die Vorteile von Fat-Domain-Modellen gegenüber Transaktionsskripten zu diskutieren, wenn wir alle wissen, was diese beiden Begriffe bedeuten. Und so weiter.
Und am stärksten ist es, wenn ich eine Klasse FooBuilder benannt habe, dann wissen Sie, dass ich das Builder-Muster verwende, um mein Foo zu generieren.
Auch wenn Sie nicht wissen, wovon ich spreche, wenn ich sage "Beobachtermuster ist ideal dafür", können Sie es ganz einfach googeln.
In diesem Sinne wird die Kraft von Designmustern niemals verblassen.
quelle
Design Patterns sind eine Steigerung der Ausdruckskraft der gemeinsamen Sprache, die wir als Softwareleute verwenden. Diese gemeinsame Sprache ist nicht wesentlich, aber sie erleichtert und beschleunigt das Ausdrücken vieler gängiger Problemlösungen. Zum Beispiel ist es viel einfacher, über Singletons zu sprechen, als über "Klassen, in denen wir nur eine Instanz haben sollen, die aber nicht statisch und global gemacht werden können".
Die Lösungen, die Entwurfsmuster bieten, sind nützlich, aber es sind Lösungen, an die Sie wahrscheinlich schon gedacht haben, wenn Sie mit den Problemen konfrontiert waren, die sie lösen. Ein gewisser Reifegrad ist erforderlich, um Entwurfsmuster zu verstehen. Wenn Sie das Problem nie lösen mussten, werden Sie den Wert oder das Interesse an der Lösung nicht erkennen.
quelle
Muster dienen hauptsächlich zwei Zwecken:
Vorhersehbare Lösung von Spannungen: Muster dienen dazu, bestimmte Spannungen auf eine Weise zu lösen, von der bekannt ist, dass sie funktionieren. Kent Beck, Autor von Smalltalk Best Practice Patterns , beschreibt Patterns als eine Möglichkeit, die Entscheidung zu wiederholen, die ein Experte unter ähnlichen Umständen treffen würde. Solange die Spannungen gleich bleiben (und dies häufig tun), bleiben die Muster, die sie auflösen, nützlich.
Kommunikationskraftmultiplikator : Muster erlauben es uns, viel mit wenig zu sagen. Sie nutzen eine kleine Reihe leistungsfähiger, gut verständlicher Konzepte, die in einer Vielzahl von Problembereichen anwendbar sind. Über den kommunikativen Wert von Mustern ist die Antwort von @ pdr hinfällig.
quelle
Ich halte die Behauptung, dass Designmuster Innovationen behindern, für völlig falsch. Sie sollten wissen, wo bereits vorhanden ist, damit Sie das Rad nicht neu erfinden müssen. Als temporär gelten Muster als Ganzes für OOP-Systeme und sind nicht an eine bestimmte Plattform oder Sprache gebunden.
Was ich nicht mag, wenn Leute über Muster sprechen, ist, dass einige Leute eine Art Besessenheit mit ihnen haben. Ich hatte einmal einen Kunden, der mich bat, "mindestens zwei weitere Muster einzuschließen" (WTF ?!), da mein Code mangels Modewörtern nicht unternehmerisch genug aussah.
quelle
Vielleicht ist das Konzept der Anti-Muster deutsch. Ich halte das Studium von Entwurfsmustern nicht für den entscheidenden Schritt, um Software-Ingenieur zu werden. Software-Design ist wichtig, oft als Vorrecht des Software-Architekten für ein Projekt vorbehalten, aber realistisch etwas, das durch Konsens im sprichwörtlichen "gut gelaunten" Team herausgearbeitet werden kann.
Aber Designmuster und Anti-Muster bilden eine Ressource für diese Diskussionen. Man muss die Lektionen verstehen, die gut funktionierten (oder nicht) und wie man die Konsequenzen von Designentscheidungen ausnutzen (oder abmildern) kann. Ein gutes Team könnte sich für solche Diskussionen ein eigenes Vokabular einfallen lassen, aber es ist wirklich nicht so schlimm, auf die Defacto-Standards zu verweisen, die von Autoren ausgearbeitet wurden, die dort waren und dies getan haben.
quelle
Es gibt zwei Arten von Entwurfsmustern:
OK, wohl alle Muster sind etwas situativ, aber bei einigen kommen die Kräfte aus der realen Welt, und bei anderen kommen die Kräfte aus den Werkzeugen. Werkzeuge ändern sich viel schneller als die reale Welt.
quelle
Über Entwurfsmuster zu lesen ist wie Mathematik zu lernen, anstatt sie neu zu erfinden. Keiner hält Sie davon ab, große Fortschritte in einem bestimmten Bereich zu erzielen, wenn Sie erst einmal ein solides Verständnis für das haben, was vorher war. Glaubst du, Rieman hat nie Euklid gelesen?
quelle
Das Entwerfen von Mustern hat den Vorteil, dass die Zeit, die Ihre Kollegen oder Kunden mit dem Gedanken "Wie funktioniert das?" Verbringen, verkürzt wird. Auch wenn es keinen Sinn macht, einen Standard zum Zwecke der Standardisierung durchzusetzen, haben Sie immer dann, wenn ein Programmierer nach diesem Muster sucht und dies erwartet, seine und Ihre Aufgaben erfüllt einfacher.
quelle
Ich glaube, dass die vierköpfige Bande selbst Designmuster als klassifiziert
Also ja, die Muster sind relevant, wenn die gleiche Art von Problem auftritt. Und das bringt uns zu einem Problem mit dem Begriff "Design Pattern". Ein Muster ist etwas Erkennbares, das wiederholt auftritt. In Wirklichkeit gibt es also kein Muster von Designs, sondern ein Muster von Problemen.
Einige Programmiersprachen haben möglicherweise native Lösungen für einige dieser Probleme. Das Buch "Design Patterns" selbst erwähnt, dass das Besuchermuster bei Verwendung von CLOS von geringem Wert ist, da Multi-Dispatch von CLOS unterstützt wird, dem eigentlichen Problem, das das Besuchermuster zu lösen versucht.
Darüber hinaus verfügt das .NET Framework über einen integrierten Ereignismechanismus zum Veröffentlichen von Ereignissen für mehrere Listener, sodass das Observer-Muster in diesem Kontext weniger relevant ist.
Der Wechsel von Desktop-Anwendungen zu Web-Anwendungen ** ändert auch die Art der zu lösenden Programmierprobleme. Viele der Muster im Buch "Design Patterns" sind für Desktop-Anwendungen relevant, jedoch weniger für Web-Anwendungen. Natürlich können diese Muster bei Apps mit nur einer Seite wieder auf der Clientseite relevant sein.
Aber die Entwurfsmuster und Bücher wie "Entwurfsmuster" oder "Muster der Unternehmensanwendungsarchitektur" sind von großem Wert, wenn Sie ein Anfänger in der Programmierung sind und zum ersten Mal mit einer neuen Art von Problem konfrontiert werden. Als ich das erste Mal war, wurde ich gebeten, die Undo-Funktionalität zu implementieren. Wäre da nicht das Buch "Design Patterns" gewesen, hätte meine Implementierung wahrscheinlich so etwas wie das Speichern eines Schnappschusses der Daten nach jeder Zustandsänderung *** gewesen - ein sehr fehleranfälliger und fürchterlich ineffizienter Ansatz.
Ja, einige Muster verlieren mit der Zeit an Relevanz, und wenn Sie ein erfahrener Programmierer werden, denken Sie weniger über sie nach. Für einen Neuling sind sie jedoch wertvoll, solange Sie sich daran erinnern, dass sie das Mittel zur Lösung eines Problems sind - und nicht die Aufgabe, so viele wie möglich zu verwenden.
* Das Zitat ist möglicherweise nicht 100% genau, da es aus dem Speicher stammt
** Nach meiner Erfahrung ist es in Unternehmen sehr verbreitet, Web-Bereitstellungsmechanismen für interne Branchenanwendungen zu wählen.
*** Nach dem Erlernen der funktionalen Programmierung und der funktionalen Datenstrukturen ist dies möglicherweise die Art und Weise, wie ich sie heute lösen würde.
quelle
Das sklavische Festhalten an Designmustern kann sich nachteilig auswirken - Muster sind dokumentierte Lösungen für häufig auftretende Probleme, aber keine Bedienungsanleitungen. Nur weil sie ausführlich besprochen und in einigen Fällen außerhalb wirksamer Problembereiche angewendet werden, bedeutet dies jedoch nicht, dass sie überhaupt keinen Wert haben. Es handelt sich um eine Reihe von Grundsätzen, die beim Entwerfen der Programmarchitektur als Framework verwendet werden sollen. Auf diese Weise kann der Architekt einen Eindruck davon gewinnen, wie er die Lösung sehen möchte. Ein gutes Entwicklungsteam betrachtet sie eher als Grundlage für Funktionalität als als funktionale Spezifikation.
quelle