Was ist musterbasierte Programmierung?

16

Kann jemand die Besessenheit mit Mustern und Anti-Mustern beim Programmieren erklären? Ich frage, weil ich absolut keine Ahnung habe, was eines der Muster bedeutet. Wenn ich mit einer Programmieraufgabe konfrontiert werde, denke ich ein wenig über das Problem nach, schreibe einige Datenstrukturen auf, von denen ich denke, dass sie relevant sind, erstelle eine Lösung, trenne einige Module heraus und iteriere. Nirgendwo im Prozess denke ich "Oh, ich brauche FunkyLookyTastic Muster hier".

davidk01
quelle
12
Obsession mit Mustern ist in gewisser Weise ein Anti-Muster
Anto
1
In letzterem Punkt stimme ich teilweise zu. Es gibt einige Muster, die ich benennen werde, aber einige Lehrbuchmuster scheinen geringfügige Varianten voneinander zu sein, und das Interessante ist normalerweise, wie Sie das Muster ohnehin an den konkreten Fall anpassen, sodass Sie die Dinge nicht dogmatisch angehen sollten.
Steve314
1
Programmieren Sie in einer dynamischen Sprache? Viele der Muster, auf die verwiesen wird, sind Möglichkeiten, um Einschränkungen in Java zu umgehen.
Johncip
Außerdem hängt die Behandlung jedes Problems nicht von der Teamgröße ab. Bei einem MVC-Framework werden Modelle häufig normalisiert, Ansichten können jedoch mit abgeleiteten Daten umgehen. Es gibt ein paar Möglichkeiten, damit umzugehen, aber die Leute sollten dieses Problem nicht jedes Mal (möglicherweise anders) lösen, wenn es auftritt. Und andere, die den Code lesen, sollten nicht herausfinden müssen, wie das Problem X in diesem Fall gelöst wurde, im Gegensatz zu allen anderen.
Johncip

Antworten:

19

Ein Muster ist ein gängiger Ansatz zur Lösung eines gängigen Problemtyps. nicht mehr und nicht weniger. Wenn Sie sie kennen und verstehen, können Sie die Erfahrungen anderer nutzen, um eine Lösung zu finden, die erwiesenermaßen gut funktioniert, und in der Vergangenheit aufgetretene Fallstricke zu vermeiden kenne dieses Muster.

Natürlich können Sie eine gute Lösung finden, ohne explizit ein Muster zu verwenden, und Sie können auch eine schlechte Lösung finden, indem Sie versuchen, ein Muster anzuwenden, das nicht wirklich zu Ihrem speziellen Problem passt. Ich denke, die "Besessenheit", die Sie beobachten, kommt im Allgemeinen von Menschen, die das Konzept gerade entdeckt haben, und denke, dass es ziemlich mächtiger ist, als es tatsächlich ist. Die meisten Menschen werden sie schnell als das erkennen, was sie sind: ein nützliches Werkzeug, kein Wundermittel.

Anti-Patterns hingegen sind häufig zu beobachtende Verhaltensweisen, die die Codequalität beeinträchtigen. Auch hier ist es hilfreich, einige davon zu kennen und zu verstehen, damit Sie ein solches Verhalten vermeiden und versuchen können, es (mit begründeten Argumenten) zu korrigieren, wenn Sie es in anderen beobachten. Einige würden den übermäßigen Gebrauch von Mustern als Anti-Muster bezeichnen.

Mike Seymour
quelle
1
Zum Beispiel wurden die berühmten objektorientierten Vierergruppenmuster aus den Erfahrungen der Autoren und der Personen, mit denen sie in Kontakt standen, zusammengestellt. Der Grund, warum einige Muster mehrere Namen haben - sie wurden unabhängig voneinander neu erfunden und mehrmals benannt. Die meisten Programmierer werden natürlich ein paar Muster neu erfinden, die sie sich selbst überlassen - und natürlich ein paar Antimuster.
Steve314
3
Die "Besessenheit", die Sie beobachten, kommt im Allgemeinen von Menschen, die das Konzept gerade erst entdeckt haben - meistens wahr, IMHO. Ich glaube, es gibt diejenigen, die der Meinung sind, dass Sie ein Problem mit Mustern lösen müssen ... und wenn Ihre Lösung keine offensichtlichen Muster enthält, dann ist Ihre Lösung falsch ... wir sollten uns die Zeit nehmen, um Muster zu lernen, wie sie aussehen ‚re verwendet, und wann und wenn sie nicht zu verwenden - sie ist Teil unserer Werkzeugkasten sind
iAbstract
9

Muster sind sowohl das destillierte Wissen von Programmierern in einem Kochbuch als auch eine nützliche Kommunikationsmethode für Programmierer.

Wie andere Antworten vermuten lassen, sind Muster tatsächlich gemeinsame Lösungen für gemeinsame Probleme. Der Vorteil ist, dass Sie häufig bessere Lösungen erhalten, indem Sie ein vorhandenes Muster verwenden oder wahrscheinliche Fallstricke erkennen, bevor Sie mit dem Codieren beginnen.

Der andere Vorteil ist, wenn Sie mit jemandem über Ihren Code sprechen. Muster sind eine andere Art von Fachsprache, die ausführliche Beschreibungen in wenigen Worten zusammenfasst. Versuchen Sie zu erklären, "dann haben wir einen Beobachter von der Fabrik hinzugefügt", ohne sich auf Muster zu beziehen. Sie können es tun, aber es dauert lange.


quelle
2
+1 für die Kommunikation. Die tägliche Routine verläuft viel reibungsloser, wenn alle auf derselben Seite sind und ein gemeinsames Lexikon haben.
Ampt
3

Die meisten Entwickler werden sich an ein neues Paradigma oder eine neue Methodik gewöhnen. Das habe ich getan, als ich zum ersten Mal von Designmustern hörte. Entwurfsmuster sind genau das, was der Name vermuten lässt: ein Entwurf oder eine Vorlage zum Erstellen von Klassen und zum Modellieren ihres Verhaltens und ihrer Interaktion auf vorhersehbare Weise

Schauen Sie sich Häuser an. Sie haben einige Ähnlichkeiten. Jedes Haus hat ein Wohnzimmer, eine Küche, ein Schlafzimmer, ein Badezimmer und eine Toilette für ein Minimum. Niemand wird ein Haus ohne Bad bauen, oder? Die Apartments haben ein anderes Muster als die Bunglows. Schlösser haben ein völlig anderes Muster. Auch Kleidung hat Muster. Eine Jacke und ein formelles Hemd haben beide dasselbe grundlegende Design, verhalten sich jedoch unterschiedlich: Sie werden für ein Interview keine Cowboyjacke tragen. Ebenso können Klassen und ihre Aktionen nach ihrem Verhalten und Design gruppiert werden. Wenn Sie die gemeinsamen Elemente in ihrem Verhalten betrachten, erhalten Sie Entwurfsmuster für Klassen.

Meines Wissens nach sind Entwurfsmuster nur wichtig, wenn Wiederverwendbarkeit und Erweiterbarkeit im Vordergrund stehen. Wenn Sie kleine Apps erstellen (beispielsweise weniger als 10 Klassen), benötigen Sie diese möglicherweise überhaupt nicht. Aber große Projekte, insbesondere solche mit großen Teams, die lange Wartungs- und Funktionserweiterungszyklen haben, benötigen definitiv Muster. Es ist nicht einmal eine Option in großen Projekten.

Schauen Sie sich einige Online-Tutorials zu Mustern an. Wikipedia hat eine gute Sammlung von Artikeln. Diese Seite ist auch gut: http://sourcemaking.com/ . Wenn Sie ein erfahrener Programmierer sind, werden Sie feststellen, dass Sie auf einige Muster gestoßen sind, vielleicht sogar etwas Ähnliches implementiert haben, ohne es unter einem bestimmten Namen zu kennen.

Ignoriere sie nicht ganz! Sie werden sie möglicherweise in Zukunft nützlich finden, wenn nicht jetzt. Der Schlüssel zu einem aufgeschlossenen Umgang mit Entwurfsmustern ist die Frage: "Was passiert, wenn ich keine Entwurfsmuster verwende?" Muster sind nicht als "Heilmittel" gedacht (obwohl Sie sie als Heilmittel für ein Problem verwenden können). Sie verkörpern vielmehr das Sprichwort "Vorbeugen ist besser als heilen".

Trotzdem warne ich vor der Besessenheit, Muster zu implementieren, wo und wann immer Sie einen kleinen Vorwand dafür sehen. Ich hatte dieses Problem in einem Projekt, bei dem der Architekt davon überzeugt war, dass das Projekt ohne DP eine völlige Katastrophe wäre. Wir hatten ein Gruppentreffen, bei dem die Ingenieure das Design durchgingen und darauf hinwiesen, dass viele von ihm empfohlene Muster nichts anderes nützen würden, als "wow look at the beautiful patterns" zu zeigen. Es war viel Überzeugungsarbeit und einiges Verhandeln erforderlich, um die Anzahl der Stellen, an denen Muster verwendet wurden, auf eine reine Bedarfsbasis zu reduzieren.

DPD
quelle
1

Die Leute, die geantwortet haben, sind korrekt in Bezug auf "musterbasierte Programmierung", wie es normalerweise gedacht wird. Ich habe eine etwas andere Definition, die für meine Arbeit relevanter ist, und ich neige dazu, "musterbasierte Programmierung" zu verwenden, um einen Plug-in-Ansatz zu beschreiben, anstatt einen Planungsansatz.

Da ich jQuery-Plugins, ein CMS-Cloud-Plugin und eCommerce-Plugins programmiere, bedeutet "musterbasiertes Programmieren" aus dieser Perspektive, einen Blick auf die Kerntechnologie und die vorhandenen Anwendungsfälle zu werfen und die statistisch relevantesten zu ermitteln. Insbesondere Plugins müssen sehr musterbasiert sein, damit sie sich gut in den Programmierkontext einfügen.

Es ist jedoch am besten, ein Muster anzuwenden, NACHDEM Sie gültige Anwendungsfälle für mehrere Projekte sehen, damit es statistisch für die Wiederverwendung gültig ist.

Jason
quelle