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?
design-patterns
anand
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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:
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.
quelle
Derek Banas hat YouTube-Tutorials für das Entwerfen von Mustern erstellt, die mir sehr gefallen:
http://www.youtube.com/playlist?list=PLF206E906175C7E07
Sie können etwas kurz sein, aber sein Timing und seine Präsentation machen es sehr angenehm, sie zu lernen.
quelle
Ü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.
quelle
Ü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..
quelle
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?
quelle
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
quelle
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.
quelle
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.
quelle
Haben Sie das Buch der Viererbande ausprobiert?
Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software
quelle
Für Bücher würde ich Design Patterns Explained und Head First Design Patterns empfehlen . Um diese Muster wirklich zu lernen, sollten Sie sich Ihren vorhandenen Code ansehen. Suchen Sie nach den Mustern, die Sie bereits verwenden. Schauen Sie sich Code-Gerüche an und welche Muster sie lösen könnten.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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 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 ...
quelle
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.
quelle
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.
quelle
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
quelle