Design Patterns: Soll ich sie lernen? [geschlossen]


13

Es ist also komisch, zwei Fragen hintereinander zu stellen, aber sie sind nicht sehr verwandt und ich wollte sie nicht kombinieren, aber ich spamme keine Fragen, das verspreche ich!

Wie auch immer, ich bin ein College-Absolvent, und meine Ausbildung hat nur Designmuster angesprochen ... wir haben ein paar einfache implementiert, die Tatsache angesprochen, dass es kompliziertere gab, und wir wurden angewiesen, uns an das GoF-Buch zu wenden, wenn wir wollen wollte mehr lernen. Meine Frage ist, lohnt es sich, die Muster im GoF-Buch zu lernen? Mir erschien es immer kontraintuitiv, ein Problem einem klassischen Muster anzupassen, aber offensichtlich sind das Buch und die Muster aus einem bestimmten Grund berühmt. Zeigen sie sich genug, dass ich sie lernen sollte?

Danke noch einmal!


Haben Sie die anderen Fragen gelesen, die als [Entwurfsmuster] markiert sind?
Peter Taylor

Diejenigen, die vorgeschlagen wurden, bevor ich sie veröffentlichte, schienen hauptsächlich nach guten Ressourcen zu fragen oder über den besten Weg zu sprechen, sie zu lernen. Ich kann sie selbst lernen, ich bin nur neugierig, wie klassische Muster angewendet werden. Entschuldigung, wenn dies ein Repost ist, können Sie ihn jederzeit schließen.
Prelic

1
Ich glaube nicht , es ist eine exakte repost, aber ich frage mich , was Sie brauchen , welche nicht von den Antworten auf zB geliefert programmers.stackexchange.com/questions/84098/... programmers.stackexchange.com/questions/78825/...
Peter Taylor

Zumindest hat es jemand im College erwähnt. Ich hörte nichts davon, bis ich anfing, für meinen zweiten Job nach dem College zu interviewen (wo ich anscheinend nicht geeignet war, weil ich nichts von Singleton gehört hatte, anstatt die Mechanik des Musters zu kennen).
Mayo

Antworten:


11

Wie gewöhnlich

Es hängt davon ab, ob

Es hängt davon ab, wie viel OOP Sie durchgeführt haben, um festzustellen, ob Sie die Entwurfsmuster erkennen oder sogar verwenden können

Es hängt davon ab, wie diszipliniert Sie sind, ob Sie die einmal erlernten Muster richtig anwenden und nicht wie der sprichwörtliche Mann mit einem Hammer verrückt werden

Auf der anderen Seite ... fünf Finger!

Wenn Sie ein paar Jahre ernsthafte OOP-Arbeit geleistet haben oder einen zuverlässigen Mentor haben, der Sie auf Trab hält oder wenn Sie einfach nur gerne OOP-Nerd lesen, dann kaufen jeden Fall das Buch und studieren es.

Es ist hilfreich, die Muster zu kennen, damit Sie erkennen, wann Sie sie verwenden müssen und wann Sie sie nicht verwenden müssen.


Das habe ich mir gedacht. Nur aus Neugier, wenn Sie ein paar auswählen müssten, die Sie als das wichtigste konzeptionell oder als das beliebteste betrachten würden, welche wären das?
Prelic

1
@ Prelic: Singleton - wegen der Kontroverse - und Besucher - weil es so verdammt nützlich ist
Steven A. Lowe

2
@prelic: Ich würde mit Strategie und Beobachter beginnen - weil sie so verdammt nützlich sind
Falcon

1
+1 Bester Kommentar zu diesem Thema aller Zeiten! Von mir regelmäßig verwendete Muster: Befehl, Adapter und Factory-Methode.
Oliver Weiler

Die, die ich zum Atmen benutze, sind Singleton, Template Method, Decorator und Composite. Und Iterator, aber fast immer in der Gestalt eines java.util.Iterator, wo es kaum wie ein Muster scheint. Strategie, Besucher und Fassade würde ich bewusst anwenden, wenn ich die Notwendigkeit dafür sehe.
Tom Anderson

21

Ja, du solltest sie lernen.

Es ist sogar noch sinnvoller, sie erneut zu besuchen, nachdem Sie Erfahrung gesammelt haben , damit Sie sie mit dem vergleichen können, was Sie wissen. Bei einigen Mustern hat sich herausgestellt, dass Sie dies selbst entdeckt haben, aber Sie werden etwas Allgemeineres über die Verwendung, Kompromisse, Varianten usw. erfahren. Andere scheinen die Probleme, mit denen Sie fertig wurden, direkt anzusprechen und zeigen Ihnen eine elegante Lösung, die Sie nicht kannten.

Die große Mehrheit der Muster ist sehr nützlich und verbreitet . Andere mögen nicht so beliebt sein, haben aber immer noch eine enge Verwendung, wo sie perfekt passen.

Es gibt noch einen weiteren Grund, warum es sich zu lesen lohnt: Sie lernen, wie man denkt . Sicher, es ist keine Silberkugel, aber dennoch eine unschätzbare Inspiration.

Last but not least versuchen Sie unter keinen Umständen, ein Problem an ein Muster oder Werkzeug anzupassen . Das ist sehr schlechtes und gefährliches Denken! Verstehen Sie, wie das Tool funktioniert, und gehen Sie das Problem mit Bedacht an, niemals umgekehrt.

Je mehr Tools Sie kennen, desto besser. Manchmal kann ein Tool Ihr Denken anregen (anstatt ein Problem direkt zu lösen), ein anderes Mal werden Sie einige davon für eine großartige Lösung kombinieren.

Das GOF-Buch ist eine großartige Quelle für viele nützliche Tools, die wir täglich verwenden .


Danke für den guten Rat! Ich wünschte, ich könnte mehrere Häkchen setzen
am

6

Der wichtigste Vorteil, wenn Sie ein wenig über Design Patters wissen, ist, dass Sie wissen, was die Begriffe bedeuten. Mit anderen Worten, Sie kennen den allgemeinen Wortschatz .

Für mich ist dies die wichtigste Errungenschaft aller Turbulenzen bei Design Patterns. Es ist ein gemeinsames Vokabular entstanden, in dem Sie nur die Namen der spezifischen Patterns verwenden können, und andere wissen sofort, wovon Sie sprechen, ohne dass Sie es erklären müssen . Die Dinge, die in den Mustern beschrieben werden, sind den meisten Programmierern gut bekannt. Es braucht jedoch einige Zeit, um zu erklären, was Sie für andere bedeuten, damit die Kommunikation einfacher wird, die Musternamen zu kennen.

Beispiele sind Visitor, Singleton und Decorators.

Mit anderen Worten, ich schlage vor, dass Sie sich zumindest mit den Namen und deren Funktion vertraut machen.


5

JA aber mit Vorsicht!

Der JA-Teil:

Manchmal stießen wir bei unseren Entwürfen auf Probleme. Manchmal sind diese Probleme sehr häufig, sodass Sie anhand von Entwurfsmustern gut getestete Lösungen für diese Probleme finden. Die wichtigsten Vorteile von Design Patterns zu lernen ist , dass man eine Menge mit einer Design - Lösung kommen können schneller und wenn Ihre Mitarbeiter kennen die Entwurfsmuster sind Kauderwelsch , können Sie eine Lösung viel schneller als auch erklären.

Das mit vorsichtigem Teil:

Entwurfsmuster sollten nicht das Allerheiligste Ihrer Lösungen sein. Die einfachste (KISS) Lösung ist wünschenswerter, und Designmuster machen die Dinge oft komplexer. Wenn Sie Designmuster lernen, lernen Sie auch etwas über Anti-Muster. Ich kenne einige alte Leute, die gegen Designmuster sind, und ich stimme ihnen in gewissem Maße zu, denn wenn Sie nicht über zu viel Programmiererfahrung verfügen, aber über eine Menge Designmustertheorie, werden Sie und Ihr Team möglicherweise viel schwerer Mannschaft.

Denken Sie nicht, dass Sie Ihre Lösung anpassen / ändern müssen, um einem Entwurfsmuster zu entsprechen. Im Gegenteil, Sie können ein Entwurfsmuster biegen, damit es in Ihre Lösung passt. Ist in Ordnung, wenn Sie nicht alle Zutaten eines Entwurfsmusterrezepts verwenden, solange Sie eine bessere Lösung für Ihr spezielles Problem haben. Stellen Sie sich Entwurfsmuster als Vorschlag und nicht als Regel für Ihre Lösung vor.


1

Ich fand die Methode der Net Objectives, Muster als am vorteilhaftesten zu betrachten. Die Leute, die das GoF-Buch zu oft lesen, nehmen an, dass die Strukturen, die sie in der Design-Notation und im Code zeigen, die Muster sind und dass sie immer so aussehen. Es gibt eine andere, wohl bessere Sichtweise.

Muster sind Mengen ähnlicher Probleme , die alle mit bestimmten abstrakten Formeln gelöst werden können, nicht mit Mengen von Formeln, die zur Lösung verschiedener Probleme verwendet werden können. Dies bedeutet, dass das Muster bereits vorhanden ist, bevor Sie überhaupt versuchen, ein Design zu erstellen. Das Ziel des Designers ist es , es zu finden und nicht aufzuzwingen.

Außerdem schauen sich viele Leute Muster an und sagen: "Oh, das habe ich nur gelöst, indem ... ich habe keine dummen Muster verwendet." Die Sache ist, dass "...." fast unweigerlich eine Implementierung einer gegebenen Musterlösung beschreibt. Beispielsweise kann eine Reihe von Funktionszeigern als Verantwortungskette dienen, auch wenn das herkömmliche Rezept so nicht aussieht.

In diesem Sinne sollten Sie sich beim Studium der Muster auf die Probleme konzentrieren und nicht auf die Muster. Lernen Sie die motivierenden Faktoren von Mustern und wie sie diese Faktoren angehen. Auf diese Weise können Sie die Muster im Problem erkennen und sie dann einfach darauf hinweisen. Dies, zusammen mit der Sprache, die uns Muster für das Sprechen über Design geben, ermöglicht es Ihnen, ein Design herauszustellen, das gut geeignet ist, um die verschiedenen Schwierigkeiten zu beantworten, mit denen Sie gegenwärtig konfrontiert sind.

JA, kurz gesagt, Lernmuster sind es nicht nur wert ... Sie begrenzen sich selbst, indem Sie sie NICHT lernen. Ich möchte nicht alle motivierenden Prinzipien und die allgemeine Form der Lösung beschreiben müssen, wenn ich sage: "Sieht aus wie ein Besucher für mich."

Hier ist ihre Website: http://www.netobjectives.com/PatternRepository/index.php?title=Main_Page


Diese Verknüpfung ist eine großartige Ressource und eine kurze Erklärung der meisten wichtigen Entwurfsmuster. Es ist nicht so ausführlich wie ein Buch, aber das ist der Vorteil.
jhocking

1

Die von GoF beschriebenen Design Patterns sind eine natürliche Erweiterung des OO-Paradigmas. Wenn Sie die Ziele von OOP (Kapselung, Trennung von Bedenken, DRY-Prinzip, Modularität usw.) nicht genau verstehen, ist der Versuch, Design Patterns erfolgreich anzuwenden, wenig sinnvoll.

Wenn Sie sich jedoch im realen OOP die Füße nass machen und versuchen, den OOP-Werten treu zu bleiben, werden Sie unweigerlich in Situationen geraten, wie sie von der GoF beschrieben werden, und es besteht die Möglichkeit, dass Sie ähnliche Lösungen erfinden. Nachdem Sie viele ähnliche Probleme gelöst haben, können Muster auftauchen. An dieser Stelle ist es sinnvoll, das Buch zu lesen. Im Idealfall haben Sie ein Gefühl der Anerkennung und Sie werden sofort die Eleganz und Sauberkeit der vorgeschlagenen Muster zu schätzen wissen. Es besteht die Möglichkeit, dass Sie auch einige dieser Denkmuster in Betracht ziehen (die, sobald Sie sie kennen, viele von ihnen sind). Sie können auch gut beurteilen, ob ein bestimmtes Muster in einer bestimmten Situation anwendbar ist oder nicht.

Und noch eine Warnung: Nur weil Sie all diese Muster kennen, müssen Sie sie nicht überall anwenden. Einige von ihnen sind ziemlich schlau und die Leute sind versucht, sie zu benutzen, selbst wenn sie fürchterlich unangemessen sind. Das Singleton-Muster ist das bekannteste Beispiel (ein Großteil der Singleton-Kontroverse rührt von unangemessener Verwendung her, z. B. wenn es keinen Vorteil bringt, eine zu haben -instanz-only Einschränkung).


0

Design Patterns versuchen Designprobleme zu lösen.

  • Sie wurden in erster Linie für OOP-Sprachen AFAIK gemacht.
  • Einige der Probleme existieren nicht in der funktionalen Programmierung (Command Pattern ist, wie erstklassige Funktionen erstellt werden, Strategy Pattern nähert sich Funktionen höherer Ordnung an ...). Diese Muster gelten für Sprachen (hauptsächlich OOP), für die keine Funktionalität erforderlich ist.
  • Sie sind alphabetisch sortiert. Verschiedene Muster setzen sich aus anderen zusammen oder die Ideen setzen sich aus denen zusammen, die vorher da waren.

Ich lernte später Muster, nachdem ich einige Kenntnisse in funktionaler Programmierung, UML, Datenbank-Design, Datenstrukturen und Algorithmen hatte. Ich habe gerade die Liste der Designs dieser Muster auf dem Spickzettel durchgesehen und nickte, dass ich die meisten bereits kenne. Einige waren wirklich nett wie Singleton oder "Kommunikations" -Muster (Besucher, Vermittler) ...


Entwurfsmuster versuchen ausdrücklich nicht, Entwurfsprobleme zu lösen. Die GoF selbst beschreiben sie als übliche Muster, die sie in der realen Programmierung beobachtet haben. Ziel ist es, diese Muster so zu beschreiben, dass andere Programmierer ähnliche Situationen erkennen und häufige Fehler und Fallstricke vermeiden sowie alternative Lösungen kennen.
tdammers

0

Ich stimme den in mehreren anderen Antworten gemachten Aussagen darüber zu, wie gefährlich es sein kann, Entwurfsmuster mit wenig Erfahrung anzuwenden.

Trotzdem empfehle ich dringend, zumindest das erste Kapitel des GoF-Buches zu lesen. Der erste Abschnitt enthält eine Einführung in Entwurfsmuster, befasst sich jedoch mehr mit den Grundsätzen des OO-Entwurfs, und dies sollte auch mit relativ wenig Erfahrung zum Lesen und Verstehen von Vorteil sein. (Einige Schlüsselideen, an die ich mich erinnere, sind: "Verkapseln Sie die Konzepte, die variieren", "Vererbungshierarchien sollten breit, aber nicht tief sein".) Es ist fast eine Schande, dass die Arbeit hauptsächlich für ihre 23 Muster bekannt ist - die Diskussion der OO-Entwurfsprinzipien Das, was diese Muster informiert, ist auch äußerst wertvoll.


0

Meine Frage ist, lohnt es sich, die Muster im GoF-Buch zu lernen?

Absolut! Sie sollten nicht nur Software-Entwurfsmuster lernen, sondern auch Entwurfstechniken im Allgemeinen. Das Erlernen gemeinsamer Lösungen für gemeinsame Probleme ist ein fantastischer Anfang. Besonders, wenn Sie anfangen, sich mit den Mustern und ihren Kompromissen auseinanderzusetzen.

Zeigen sie sich genug, dass ich sie lernen sollte?

Das ursprüngliche Gang of Four-Buch wurde entwickelt, indem viele Softwareprojekte untersucht und Techniken erprobt wurden, mit denen eine Reihe von Entwicklern Probleme gelöst haben. Die Autoren bemerkten einige wirklich gute Techniken sowie eine Anzahl, die in sehr disjunkten Projekten angewendet wurden und darauf abzielten, sie noch mehr zu abstrahieren, um unabhängig von der Domäne von Nutzen zu sein.

Es schien immer widersprüchlich zu sein, ein Problem einem klassischen Muster anzupassen

Das ist ein großes Problem. Sie machen kein Problem passend zur Lösung. Stattdessen enthält das Buch mit den vier Entwurfsmustern für jedes Muster einen Abschnitt "Problem", und andere Musterkataloge enthalten ähnliche Abschnitte, in denen beschrieben wird, wann Sie jedes Muster anwenden sollten. Außerdem werden die "Konsequenzen" der Verwendung des Musters beschrieben. Wenn Sie versuchen, eine Konsequenz zu vermeiden, ist die Verwendung des Musters nicht die beste Idee.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.