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".
16
Antworten:
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.
quelle
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
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.
quelle
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.
quelle