Wie studiere ich Designmuster? [geschlossen]


352

Ich habe ungefähr 4-5 Bücher über Designmuster gelesen, aber ich habe immer noch nicht das Gefühl, dass ich in Designmustern der mittleren Ebene näher gekommen bin?

Wie soll ich Designmuster studieren?

Gibt es ein gutes Buch für Designmuster?

Ich weiß, dass dies nur mit Erfahrung kommen wird, aber muss es einen Weg geben, diese zu meistern?


6
Der beste Weg, um Designmuster zu lernen, ist ein Projekt. Wenn Sie Muster im Projekt sehen, wissen Sie, wann Sie sie verwenden müssen. Hier ist ein Artikel, der Schritt für Schritt das Entwurfsmuster mit einem Projektcodeproject.com/Articles/1009532/… lehrt
Shivprasad Koirala

1
Schauen Sie sich auch die Antipatterns an deviq.com/antipatterns
Developer

Sie können es von hier lernen, play.google.com/store/apps/…
Keyur Thumar

Wahrscheinlich spät, könnte aber trotzdem jemandem helfen. Versuchen Sie es mit geeksforgeeks.org/software-design-patterns , um die Grundlagen und Szenarien zu verstehen, in denen erklärt wird, wo sie verwendet werden können. Hat mir geholfen, die Grundlage und den Zweck jedes Musters zu
verstehen

Antworten:


206

Der beste Weg ist, mit ihnen zu codieren. Designmuster sind ein großartiges Konzept, das sich nur schwer anwenden lässt, wenn man nur darüber liest. Nehmen Sie einige Beispielimplementierungen, die Sie online finden, und bauen Sie sie auf.

Eine großartige Ressource ist die Seite Data & Object Factory . Sie gehen die Muster durch und geben Ihnen sowohl konzeptionelle als auch reale Beispiele. Ihr Referenzmaterial ist auch großartig.


11
Genau! Ich war immer amüsiert, dass Software unter "Informatik" fällt. Ich kann das Argument für Hardware sehen, aber Software ist eine sehr ungenaue Wissenschaft!
Joseph Ferris

Leider ist diese Ressource nicht mehr verfügbar :(.

5
@NielsW Es ist oben, vielleicht war es nur vorübergehend unten.
Uthomas

211

Ich las drei Bücher und verstand Muster immer noch nicht sehr gut, bis ich Head First Design Patterns von OReilly las. Dieses Buch öffnete mir die Augen und erklärte es wirklich gut.

Alt-Text


14
Es ist zunächst etwas seltsam, ein "ernstes" Buch zu lesen, das so aussieht, aber als ich weiter las, bemerkte ich, dass ich tatsächlich Konzepte für eine Veränderung verstand. Auf jeden Fall eine Lektüre wert.
Tim Whitcomb

18
Ich denke definitiv, dass dies das beste Buch ist, um etwas über Designmuster zu lernen. Das GoF-Buch sollte als Referenz verwendet werden, nachdem Sie sie besser verstanden haben.
Bill the Lizard

Sie haben erwähnt, dass Sie 3 Bücher gelesen haben. Haben Sie auch dieses gelesen? amazon.com/… wenn ja, was hast du gedacht?
Sivabudh

11
Ich traf Erich Gamma (einen der GoF) auf einer Konferenz in Nantes, Frankreich im Jahr 2006 und er sagte, dass dieses Buch das GoF-Buch
übertrifft

1
Nach dem Lesen dieses Buches ergab OO einen Sinn. @SimpleFellow Das GoF-Buch ist langweilig. Ohne Vorkenntnisse über Designmuster können Sie in kürzester Zeit schlafen. Es ist jedoch ein gut ( das ) Nachschlagewerk und soll Teil jeder Fachbibliothek zusammen mit DDD und P den EAA sein.
mbx

93

Meine zwei Cent für solche und alte Fragen

Einige Leute haben bereits erwähnt, üben und umgestalten. Ich glaube, die richtige Reihenfolge, um etwas über Muster zu lernen, ist folgende:

  1. Lernen Sie Test Driven Development (TDD)
  2. Refactoring lernen
  3. Muster lernen

Die meisten Leute ignorieren 1, viele glauben, dass sie 2 können, und fast jeder geht direkt für 3.

Für mich war der Schlüssel zur Verbesserung meiner Software-Kenntnisse das Erlernen von TDD. Es mag eine lange Zeit schmerzhafter und langsamer Codierung sein, aber wenn Sie zuerst Ihre Tests schreiben, denken Sie sicherlich viel über Ihren Code nach. Wenn eine Klasse zu viel Heizplatte benötigt oder leicht bricht, bemerken Sie ziemlich schnell schlechte Gerüche

Der Hauptvorteil von TDD besteht darin, dass Sie Ihre Angst vor einer Umgestaltung Ihres Codes verlieren und gezwungen sind, Klassen zu schreiben, die sehr unabhängig und zusammenhängend sind. Ohne eine Reihe guter Tests ist es einfach zu schmerzhaft, etwas zu berühren, das nicht kaputt ist. Mit dem Sicherheitsnetz werden Sie wirklich drastische Änderungen an Ihrem Code erleben. Dies ist der Moment, in dem Sie wirklich anfangen können, aus der Praxis zu lernen.

Jetzt kommt der Punkt, an dem Sie Bücher über Muster lesen müssen, und meiner Meinung nach ist es reine Zeitverschwendung, sich zu sehr anzustrengen. Ich habe Muster erst wirklich gut verstanden, nachdem ich bemerkt hatte, dass ich etwas Ähnliches getan habe, oder ich konnte das auf vorhandenen Code anwenden. Ohne die Sicherheitstests oder die Gewohnheiten des Refactorings hätte ich bis zu einem neuen Projekt gewartet. Das Problem bei der Verwendung von Mustern in einem neuen Projekt besteht darin, dass Sie nicht sehen, wie sie sich auf einen Arbeitscode auswirken oder diesen ändern. Ich habe ein Softwaremuster erst verstanden, als ich meinen Code in einen von ihnen umgestaltet habe, nie, als ich einen neuen in meinen Code eingeführt habe.



2
Sie werden viele Probleme haben, qualitativ hochwertige Inhalte zu finden, wenn Sie sich auf C ++ beschränken. Darüber hinaus ist C ++ nicht die Sprache, in der Sie das Testen lernen möchten, da es technisch gesehen keine Reflexion gibt, was allein das Erstellen guter Testwerkzeuge furchtbar schwierig macht. Es ist immer noch machbar, aber die Communitys, Foren, Diskussionen und die Anzahl der TDD-Leute sind aus diesem Grund eine Minderheit in C ++. Ich habe viel damit gearbeitet, aber trotz seiner Stärken ist es keine testfreundliche Sprache.
SystematicFrank


35

Üben, üben, üben.

Sie können jahrelang über das Cellospielen lesen und trotzdem nicht in der Lage sein, dem Instrument einen Bogen zu machen und alles zu machen, was nach Musik klingt.

Entwurfsmuster werden am besten als ein Problem auf hoher Ebene erkannt. Eine, die nur relevant ist, wenn Sie über die erforderliche Erfahrung verfügen, um sie als nützlich zu erkennen. Es ist gut, dass Sie erkennen, dass sie nützlich sind, aber wenn Sie nicht Situationen gesehen haben, in denen sie zutreffen würden oder sich beworben haben, ist es fast unmöglich, ihren wahren Wert zu verstehen.

Sie werden nützlich, wenn Sie Entwurfsmuster im Code anderer erkennen oder ein Problem in der Entwurfsphase erkennen, das gut zu einem Muster passt. und dann untersuchen Sie das formale Muster und untersuchen Sie das Problem und bestimmen Sie, was das Delta zwischen ihnen ist und was dies sowohl über das Muster als auch über das Problem aussagt.

Es ist wirklich dasselbe wie beim Codieren. K & R mag die "Bibel" für C sein, aber mehrmals von vorne bis hinten zu lesen, gibt einfach keine praktische Erfahrung. Es gibt keinen Ersatz für Erfahrung.


5
+1. Ich denke, viele Anfänger springen zu schnell in Entwurfsmuster und beginnen direkt aus dem Buch heraus mit dem Entwurf von Systemen, die auf abstrakten Fabriken, Singletons, Beobachtern, Besuchern usw. basieren. Das Ergebnis ist oft hartnäckig, nutzt die Sprache nicht optimal und ist auch unter dem Gesichtspunkt der Kopplung / Kohäsion nicht so ausgereift (letzteres leidet besonders, wenn Entwurfsmuster schlecht implementiert werden). Es braucht Erfahrung, um zu entscheiden, wo Entwurfsmuster geeignet sind, und noch mehr, um zu entscheiden, wie sie am besten in einer bestimmten Sprache implementiert werden können.
stinky472

25

Üben üben üben. Ich denke, 4 bis 5 Bücher sind sogar eine übermäßige Leseübung ohne viel Übung. Ich glaube, der beste Weg, dies zu tun, besteht darin, Ihre aktuellen Projekte anhand der Muster zu überarbeiten. Oder wenn Sie keine Projekte haben, an denen Sie aktiv arbeiten, machen Sie es einfach auf Ihre eigene Weise und versuchen Sie dann, Muster umzugestalten .

Sie können sie nicht vollständig schätzen, wenn Sie nicht unter den Problemen gelitten haben, die sie lösen. Und bitte denken Sie daran, dass es sich nicht um Silberkugeln handelt - Sie müssen sie nicht auswendig lernen und es schwer haben, sie im laufenden Betrieb anzuwenden. Meine zwei Cent..


15

Stellen Sie sich folgende Fragen:

Was machen Sie?

Was entkoppeln / koppeln sie?

Wann sollten Sie sie verwenden?

Wann sollten Sie sie nicht verwenden?

Welche fehlende Sprachfunktion würde sie verschwinden lassen?

Welche technischen Schulden entstehen Ihnen durch die Nutzung?

Gibt es einen einfacheren Weg, um die Arbeit zu erledigen?


14
und fragen Sie sich schließlich, woher Sie Antworten auf alle oben genannten Fragen erhalten
Jatin Dhoot

@ JatinDhoot durch Nachdenken ..
Gtrak

8

Ich habe festgestellt, dass es ein bisschen schwierig ist, die Vorteile einiger Muster zu verstehen oder zu verstehen, bis man die Probleme versteht, die sie lösen, und die andere (schlechtere) Art und Weise, wie die Probleme implementiert wurden.

Abgesehen von den GOF- und POSA-Büchern habe ich keine wirklich gelesen, daher kann ich Ihnen keine anderen Empfehlungen geben. Wirklich, Sie müssen nur ein Verständnis für die Problembereiche haben, und ich denke, dass viele weniger erfahrene Entwickler die Vorteile von Mustern möglicherweise nicht einschätzen können. Das ist nicht gering gegen sie. Es ist viel einfacher, gute Lösungen anzunehmen, zu verstehen und zu schätzen, wenn man zuerst mit schlechten Alternativen zu kämpfen hat.

Viel Glück


+1 für das Verständnis der Probleme, die sie lösen sollen. Die Herausforderung besteht darin, die Probleme aus erster Hand zu sehen (bei einem realen Projekt, das von persönlicher Bedeutung ist). Zu viele Beispielprobleme in Büchern werden (zu) vereinfacht. Einer der Gründe, warum ich das Buch Head First Design Patterns mag, ist, dass sie einige der Probleme mit den naiven Lösungen zeigen und wie unhaltbar diese Lösungen sind. Dann präsentieren sie das Muster und wie sauber es ist ... Schauen Sie sich zum Beispiel Decorator in diesem Buch an.
Fuhrmanator

8

Es wurden viele gute Beispiele gegeben. Ich möchte eine hinzufügen:

Wenden Sie sie falsch an. Sie müssen dies nicht absichtlich tun, es wird passieren, wenn Sie versuchen, sie in Ihrer anfänglichen Design-Pattern-Anpassung anzuwenden. Während dieser Zeit scheint jedes einzelne Problem, das Sie sehen, genau zu einem Entwurfsmuster zu passen. Oft scheinen alle Probleme aus irgendeinem Grund zum gleichen Entwurfsmuster zu passen (Singelton ist ein Hauptkandidat dafür).

Und Sie werden das Muster anwenden und es wird gut sein. Und einige Monate später müssen Sie etwas im Code ändern und feststellen, dass die Verwendung dieses bestimmten Musters nicht so klug war, weil Sie sich in eine Ecke codiert haben und erneut umgestalten müssen.

Zugegeben, das ist nicht wirklich eine Antwort, die Sie in 21 Tagen machen können, aber meiner Erfahrung nach ist es am wahrscheinlichsten, dass Sie einen guten Einblick in die Angelegenheit erhalten.


7

Haben Sie "Design Patterns Explained" von Allan Shalloway gelesen?

Dieses Buch unterscheidet sich stark von anderen Design-Musterbüchern, da es nicht so sehr ein Musterkatalog ist, sondern in erster Linie eine Möglichkeit bietet, einen Problemraum zu zerlegen, der sich leicht auf Muster abbilden lässt.

Probleme können in zwei Teile zerlegt werden: Dinge, die gemeinsam sind und Dinge, die variieren. Sobald dies erledigt ist, ordnen wir die allgemeinen Dinge einer Schnittstelle zu und die Dinge, die von einer Implementierung abweichen. Im Wesentlichen fallen viele Muster in dieses "Muster".

Zum Beispiel werden im Strategiemuster die gemeinsamen Dinge als Kontext der Strategie ausgedrückt, und die variablen Teile werden als konkrete Strategien ausgedrückt.

Ich fand dieses Buch im Gegensatz zu anderen Musterbüchern, die für mich genauso aufregend sind wie das Lesen eines Telefonbuchs, sehr nachdenklich.


6

Haben Sie das Buch der Viererbande ausprobiert?

Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software


7
Ich würde dieses Buch nicht als "augenöffnendes" Buch empfehlen :)
Geo

73
Ich würde es als ein Buch empfehlen, das die Augen schließt. Ein paar Seiten dieses Bandes vor dem Schlafengehen und Ihre Schlaflosigkeit gehören der Vergangenheit an.
Dónal

2
kam hierher, als ich mich mitten am Tag beim Lesen dieses Buches eingeschlafen fühlte. gesucht nach 'Designmuster verstehen'. habe den Beitrag gefunden. fand den Kommentar oben. meinen Tag gerettet. stimme anderen zu, es ist ein
augenschließendes


4

Ich habe einige Diskussionsgruppen für Designmuster geleitet ( unsere Website ) geleitet und 5 oder 6 Musterbücher gelesen. Ich empfehle, mit dem Head First Design Patterns-Buch zu beginnen und an einer Diskussionsgruppe teilzunehmen oder diese zu starten. Das Head First-Buch mag zunächst ein wenig nach Hasboro aussehen, aber die meisten Leute mögen es, nachdem sie ein oder zwei Kapitel gelesen haben.

Verwenden Sie die herausragende Ressource - Joshua Kereiviskys A Learning Guide zum Entwerfen von Mustern für die Musterbestellung und zur Unterstützung Ihrer Diskussionsgruppe. Aus Erfahrung ist die einzige Änderung, die ich bei der Bestellung vorschlage, die Strategie an die erste Stelle zu setzen. Die meisten heutigen Entwickler haben eine gute oder schlechte Inkarnation einer Fabrik erlebt, so dass das Beginnen mit der Fabrik zu viel Konversation und Verwirrung über das Muster führen kann. Dies neigt dazu, sich darauf zu konzentrieren, wie man Muster studiert und lernt, was dabei ziemlich wichtig ist erstes Treffen.


3

Ich empfehle HeadFirst DesignPattern. Das Lesen des Buches reicht nicht aus, nachdem Sie die Konzepte aufgenommen haben, die Sie benötigen, um die Antworten auf viele Fragen zu finden, die in Ihrem Kopf auftauchen, und versuchen, die realen Anwendungen herauszufinden, in denen diese Muster verwendet werden können. Ich mache das gleiche und fing an, Fragen zu stellen, selbst diese Fragen sehen albern aus.


2

Mein Vorschlag wäre eine Kombination aus der Implementierung einiger von ihnen und der Analyse einiger Implementierungen von ihnen. In .Net werden beispielsweise Adaptermuster verwendet, wenn Sie sich Datenadapter ansehen, und einige andere, wenn Sie sich ein wenig mit dem Framework befassen.


2

Ich weiß nichts über das beste Buch, aber die Puristen könnten sagen Design Patterns: Elemente wiederverwendbarer objektorientierter Software

Was meinen persönlichen Favoriten betrifft, mag ich Head First Design Patterns die von O'Reilly veröffentlicht wurden. Es ist in einer Gesprächsstimme geschrieben, die mich anspricht. Als ich es las, überprüfte ich gleichzeitig meinen Quellcode, um festzustellen, ob er auf das zutraf, was ich las. Wenn ja, habe ich umgestaltet. So habe ich Chain of Responsibility gelernt.

Üben - Üben - Üben.


2

Entwurfsmuster sind nur Werkzeuge - ähnlich wie Bibliotheksfunktionen. Wenn Sie wissen, dass sie vorhanden sind und ihre ungefähre Funktion haben, können Sie sie bei Bedarf aus einem Buch ausgraben.

Designmuster sind nichts Magisches, und jeder gute Programmierer hat 90% davon selbst herausgefunden, bevor Bücher herauskamen. Zum größten Teil halte ich die Bücher für am nützlichsten, um einfach Namen für die verschiedenen Muster zu definieren, damit wir sie leichter diskutieren können.


2

Ich habe Designmuster gelernt, indem ich viele wirklich schreckliche Software geschrieben habe. Als ich ungefähr 12 war, habe ich keine Ahnung, was gut oder schlecht war. Ich habe gerade Stapel Spaghetti-Code geschrieben. In den nächsten 10 Jahren habe ich aus meinen Fehlern gelernt. Ich entdeckte, was funktionierte und was nicht. Ich habe die meisten gängigen Designmuster unabhängig erfunden. Als ich zum ersten Mal hörte, was Designmuster sind, war ich sehr aufgeregt, sie kennenzulernen, und dann sehr enttäuscht, dass es sich nur um eine Sammlung von Namen für Dinge handelte, die ich bereits intuitiv kannte. (Dieser Witz darüber, sich in 10 Jahren C ++ beizubringen, ist eigentlich kein Witz)

Moral der Geschichte: Schreiben Sie viel Code. Wie andere gesagt haben, üben, üben, üben. Ich denke, bis Sie verstehen, warum Ihr aktuelles Design schlecht ist und nach einem besseren Weg suchen, werden Sie keine gute Vorstellung davon haben, wo Sie verschiedene Designmuster anwenden können. Entwurfsmusterbücher sollten Ihnen eine verfeinerte Lösung und eine allgemeine Terminologie bieten, um sie mit anderen Entwicklern zu diskutieren, und keine Einfügelösung für ein Problem, das Sie nicht verstehen.


2

Die Vorstellung, Entwurfsmuster zu lesen und ihre Codierung zu üben, wird IMO nicht wirklich helfen. Wenn Sie diese Bücher lesen 1. Suchen Sie nach dem Grundproblem, das ein bestimmtes Entwurfsmuster löst, und beginnen Sie mit Erstellungsmustern. 2. Ich bin sicher, dass Sie in der Vergangenheit Code geschrieben haben. Analysieren Sie, ob Sie mit denselben Problemen konfrontiert waren, mit denen Entwurfsmuster eine Lösung bieten sollen. 3. Versuchen Sie, den Code neu zu gestalten / neu zu faktorisieren, oder beginnen Sie vielleicht neu.

Informationen zu Ressourcen können Sie überprüfen

  1. www.dofactory.com
  2. Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Addison-Wesley Professional Computing Series) von Erich Gamma, Richard Helm, Ralph Johnson und John M. Vlissides
  3. Muster der Unternehmensanwendungsarchitektur von Martin Fowler

1 ist ein schneller Start, 2 wird eingehend untersucht. 3 wird erklären oder sollte Sie darüber nachdenken lassen, was Sie in 2 Passungen in Unternehmenssoftware gelernt haben.

Meine 2 Cent ...


1

Ich würde denken, dass es auch schwierig ist, Entwurfsmuster zu studieren. Sie müssen mehr über OOP und einige Erfahrungen mit der Entwicklung mittlerer bis großer Anwendungen wissen. Für mich lerne ich als Gruppe von Entwicklern, um Diskussionen zu führen. Wir folgen einem Lernleitfaden zum Entwerfen von Mustern, der die Musterstudie abgeschlossen hat. Es gibt C # - und JavaScript-Entwickler, die sich zusammenschließen. Für mich ist es eine schicke Sache, dass der C # -Entwickler Codes in JavaScript schreibt und der JavaScript-Entwickler dasselbe für C # -Codes tut. Nachdem ich ein Meeting verlassen habe, recherchiere und lese ich zu Hause ein paar Bücher, um sie zu überprüfen. Der bessere Weg, mehr zu verstehen und sich daran zu erinnern, ist das Bloggen mit Beispielen in C # und JavaScript hier http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Ich würde vorschlagen, zuerst zu jedem Entwurfsmuster zu gehen, bitte verstehen Sie den Namen der Muster. Wenn jemand das Konzept kennt, erklären Sie es bitte und geben Sie ein Beispiel nicht nur für die Programmierung, sondern auch für die Lesewelt.

zum Beispiel:

Fabrikmethode:

Read world: Ich gebe nur 5, 10 oder 20 Dollar Geld und es wird Pizza zurück produzieren, ohne etwas darüber zu wissen, wie es produziert. Ich bekomme nur eine kleine, mittlere oder große Pizza, abhängig vom Geldeinsatz, damit ich essen oder was auch immer tun kann.

Programmierung: Der Client übergibt nur die Parameterwerte $ 5, $ 10 oder $ 20 an die Factory-Methode und gibt das Pizza-Objekt zurück. Der Client kann dieses Objekt also verwenden, ohne zu wissen, wie es verarbeitet wird.

Ich bin mir nicht sicher, ob dir das helfen kann. Dies hängt vom Kenntnisstand der Personen ab, die an dem Meeting teilnehmen.


Der zweite Link in der Antwort ist tot.
Pang

1

Ich denke, Sie müssen einige der Probleme untersuchen, auf die Sie als Entwickler gestoßen sind, bei denen Sie sich die Haare ausgezogen haben, nachdem Sie Ihren Code zum zehnten Mal aufgrund einer weiteren Designänderung überarbeiten mussten. Sie haben wahrscheinlich eine Liste von Projekten, bei denen Sie das Gefühl hatten, dass es viel Nacharbeit und Schmerz gab.

Aus dieser Liste können Sie die Szenarien ableiten, die die Entwurfsmuster lösen sollen. Gab es eine Zeit, in der Sie dieselbe Reihe von Aktionen für verschiedene Datensätze ausführen mussten? Müssen Sie in der Lage sein, zukünftige Funktionen für eine Anwendung bereitzustellen, möchten aber vermeiden, Ihre gesamte Logik für vorhandene Klassen zu überarbeiten? Beginnen Sie mit diesen Szenarien und kehren Sie zum Katalog der Muster und ihrer jeweiligen Probleme zurück, die sie lösen sollen. Sie werden wahrscheinlich einige Übereinstimmungen zwischen dem GoF und Ihrer Projektbibliothek sehen.


1

Für Anfänger reichen Head First Design-Muster aus, sobald wir mit allen Mustern vertraut sind, und versuchen dann, die Echtzeitobjekte in diesen Mustern zu visualisieren.

Das Buch wird Ihnen helfen, die grundlegenden Konzepte zu verstehen, es sei denn, Sie haben in der realen Welt implementiert, dass Sie NICHT MEISTER der DESIGNMUSTER sein können

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.