it-swarm-eu.dev

Sind Designmuster heutzutage wirklich wichtig?

Ich habe "Coders at Work" gelesen und mich der Tatsache gestellt, dass einige der in dem Buch befragten Fachleute nicht so begeistert von Designmustern sind.

Ich denke, dass es dafür zwei Hauptgründe gibt:

  1. Designmuster zwingen uns, in ihren Begriffen zu denken. Mit anderen Worten, es ist fast unmöglich, etwas Neues zu erfinden (vielleicht besser).

  2. Designmuster 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 zu lernen.

Der Punkt war auch, dass Menschen, die normalerweise vor einem Problem stehen 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 es 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 damit vertraut ist.

112
Sergey

Für mein Geld denke ich, dass jeder den Sinn von Designmustern verfehlt. 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 Entwurfsmustern liegt in der Kommunikation. Es ist für mich viel schneller zu sagen, "benutze eine Strategie dafür", als detailliert 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 mächtigsten ist, wenn ich eine Klasse FooBuilder benannt habe, dann wissen Sie, dass ich das Builder-Muster verwende, um mein Foo zu generieren.

Selbst wenn Sie nicht wissen, wovon ich spreche, wenn ich sage "Beobachtermuster ist dafür ideal", können Sie es ganz einfach googeln.

In diesem Sinne wird die Kraft von Designmustern niemals nachlassen.

264
pdr

Muster dienen zwei Hauptzwecken:

  • Spannungen vorhersehbar auflösen: Muster dienen dazu, bestimmte Spannungen auf eine Weise aufzulösen, von der bekannt ist, dass sie funktioniert. Kent Beck, Autor von Smalltalk Best Practice Patterns , beschreibt Muster 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, mit wenig viel zu sagen. Sie nutzen eine kleine Reihe leistungsfähiger, gut verstandener Konzepte, die in einer Vielzahl von Problembereichen anwendbar sind. Die Antwort von @ pdr ist tot auf den kommunikativen Wert von Mustern.

15
Rein Henrichs

Ich denke, die Behauptung, dass Designmuster Innovationen behindern, ist völlig falsch. Sie sollten wissen, wo bereits vorhanden, damit Sie das Rad nicht neu erfinden müssen. Um temporär zu sein, gelten Muster als Ganzes für OOP Systeme) und sind nicht mit einer bestimmten Plattform oder Sprache verknüpft.

Was ich nicht mag, wenn Leute über Muster sprechen, ist, dass manche Leute eine Art Besessenheit mit ihnen haben. Ich hatte einmal einen Kunden, der mich bat, "mindestens zwei weitere Muster aufzunehmen" (WTF?!), Da es aufgrund des Fehlens von Schlagworten in meinem Code nicht unternehmerisch genug aussah.

12
Vitor Py

Vielleicht ist das Konzept von Anti-Patterns deutsch. Ich denke nicht, dass das Studium von Designmustern der entscheidende Schritt ist, um Softwareentwickler zu werden. Software-Design ist wichtig, oft als Vorrecht des Software-Architekten für ein Projekt vorbehalten, aber realistisch etwas, das im sprichwörtlichen "gut gelierten" Team durch Konsens herausgearbeitet werden kann.

Designmuster und Anti-Muster bilden jedoch eine Ressource für diese Diskussionen. Man muss die Lehren aus Dingen ziehen, die gut funktioniert haben (oder nicht) und wie man die Konsequenzen von Designentscheidungen nutzt (oder abschwächt). Ein gutes Team könnte sein eigenes Vokabular für solche Diskussionen entwickeln, aber es ist wirklich keine so schlechte Sache, auf die Defacto-Standards zu verweisen, die von Autoren ausgearbeitet wurden Ich war dort, habe das getan.

6
hardmath

Es gibt zwei Arten von Designmustern:

  1. niversal Patterns, bei denen es viel mehr darum geht, komplexe Programme so zu organisieren, dass Sie sie überhaupt verstehen können. Diese verschwinden nicht, obwohl möglicherweise weitere Beispiele dafür entdeckt werden.
  2. Situationsmuster, die so an die besonderen Kräfte gebunden sind, die durch die Einschränkungen (z. B. die Programmiersprache) induziert werden, dass sie irrelevant werden, wenn sich diese Kräfte ändern.

OK, wohl sind alle Muster etwas situativ, aber bei einigen stammen die Kräfte aus der realen Welt und bei anderen stammen die Kräfte von den Werkzeugen. Werkzeuge ändern sich viel schneller als die reale Welt.

4
Donal Fellows

Das Lesen über Entwurfsmuster ist wie das Erlernen von Mathematik, anstatt sie neu zu erfinden. Keiner hält Sie davon ab, in einem bestimmten Bereich große Fortschritte zu erzielen, wenn Sie erst einmal ein solides Verständnis dafür haben, was vorher war. Glaubst du, Rieman hat Euklid nie gelesen?

3
Gus

Das Entwerfen von Mustern hat Vorteile, wenn sie die Zeit reduzieren, die Ihre Kollegen oder Kunden damit verbringen, sich Gedanken darüber zu machen, wie dies funktioniert. Auch wenn es keinen Sinn macht, einen Standard zum Zwecke der Standardisierung durchzusetzen, haben Sie, wenn es einen gemeinsamen und gut verstandenen Weg gibt, etwas zu tun, immer dann, wenn ein Codierer nach diesem Muster sucht, um es zu finden und zu tun, seine und Ihre Aufgaben erledigt einfacher.

1
Tom W

Ich glaube, dass die vierköpfige Bande selbst Designmuster als klassifiziert

eine gemeinsame Lösung für ein häufig auftretendes Problem *

Ja, die Muster sind relevant, wenn dieselbe 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, es gibt ein Muster von Problemen.

Einige Programmiersprachen bieten 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 der Mehrfachversand von CLOS nativ unterstützt wird, genau das Problem, das das Besuchermuster zu lösen versucht.

Das .NET Framework verfügt außerdem über einen integrierten Ereignismechanismus zum Veröffentlichen von Ereignissen für mehrere Listener, wodurch das Observer-Muster in diesem Kontext weniger relevant wird.

Der Wechsel von Desktop-Anwendungen zu Webanwendungen ** ändert auch die Art der Programmierprobleme, die wir lösen müssen. Viele der Muster im Buch "Design Patterns" sind für Desktop-Anwendungen relevant, aber nicht so sehr für Webanwendungen. Natürlich können diese Muster bei Apps mit nur einer Seite auf der Clientseite wieder relevant sein.

Aber die Entwurfsmuster und Bücher wie "Entwurfsmuster" oder "Muster der Unternehmensanwendungsarchitektur" sind von großem Wert, wenn Sie ein unerfahrener Programmierer sind und zum ersten Mal mit einer neuen Art von Problem konfrontiert werden. Als ich das erste Mal gebeten wurde, die Undo-Funktionalität zu implementieren. Ohne das Buch "Design Patterns" wäre meine Implementierung wahrscheinlich so etwas wie das Speichern eines Schnappschusses der Daten nach jeder Zustandsänderungsoperation gewesen *** - ein sehr fehleranfälliger und schrecklich ineffizienter Ansatz.

Ja, einige Muster werden mit der Zeit weniger relevant, und wenn Sie ein erfahrener Programmierer werden, denken Sie weniger über sie nach. Aber für einen Anfänger sind sie wertvoll, solange Sie sich daran erinnern, dass sie das Mittel sind, um ein Problem zu lösen - und nicht die Suche, so viele wie möglich einzusetzen.

* Das Zitat ist möglicherweise nicht 100% genau, da es aus dem Speicher stammt

** Nach meiner Erfahrung wird es für Unternehmen immer häufiger, Webbereitstellungsmechanismen für interne Branchenanwendungen zu wählen.

*** Nachdem ich funktionale Programmierung und funktionale Datenstrukturen gelernt habe, könnte ich es heute tatsächlich so lösen.

1
Pete