Designmuster lernen / implementieren (für Neulinge) [geschlossen]

85

Ich bin ein verwirrter Neuling und Hobby-Programmierer, der versucht, dies in den Griff zu bekommen. Verzeihen Sie mir also, wenn meine Frage etwas falsch ist oder nicht viel Sinn ergibt.

Ich sehe viele Fragen zu SO, die sich um die Verwendung von Entwurfsmustern drehen, und ich frage mich, ob jemand über gute Ressourcen verfügt, um Entwurfsmuster kennenzulernen und zu implementieren. Ich verstehe die allgemeine Idee und weiß, wie / wann ich einige davon verwenden soll (Singletons, Factory-Methoden), aber ich weiß, dass ich etwas verpasse.

(Nur für den Fall, dass es darauf ankommt, meine bevorzugte Sprache ist C #, aber ich könnte aus Beispielen in anderen Sprachen lernen.)

Ashlocke
quelle

Antworten:

84

Head First Design Patterns

Alt-Text

und die Design Pattern Wikipedia-Seite sind die besten Ressourcen für Anfänger. FluffyCat ist eine weitere gute, kostenlose Online-Ressource für Entwurfsmuster in Java und PHP .

Das Buch "Gang of Four" ist ein Ziel, aber es ist ziemlich weit fortgeschritten. Ich würde also warten, bis Sie die anderen Ressourcen ziemlich genau verstanden haben.

Bill die Eidechse
quelle
4
Es gibt C # -Codebeispiele
Toolkit
5
Ich sah mir dieses Buch an ... hasste es. Also nahm ich das GoF-Buch und lernte daraus alles über Designmuster. Es war etwas trocken, aber viel informativer.
Thomas Owens
1
Ich dachte anfangs, dass das Kopf-an-Kopf-Buch völlig übel werden würde (es ist nebenbei metaphorisch und hat einen sehr gesprächigen Ton). Aber es ist tatsächlich wirklich erfinderisch und informativ; Ich bin sehr froh, dass ich das Risiko eingegangen bin und es gekauft habe. Imo, Wahl der Viererbande = unnötiger Masochismus.
Codeinthehole
2
Ich fand das kopfüber Buch völlig übel. Es verbringt so viel Zeit damit, "Spaß" zu haben. Ich denke, es kommuniziert die Schlüsselideen schlecht - sie gehen verloren. Es zu lesen ist, als würde jemandes Vater versuchen, cool zu sein. Aber das GoF-Buch ist das andere Extrem und daher nicht jedermanns Sache.
Draemon
2
@ Bill: Ich weiß, aber ich stimme den Kommentaren von @Thomas und @Draemon zu. Nicht programmierorientierte Freunde von mir, denen diese Buchreihe für Algorithmen von Programmierklassen empfohlen wurde, hassten sie und landeten in "trockeneren" Büchern, weil die Informationsmenge pro Seite höher war. Es ist nur eine Frage der Präferenz. Ich habe seit jungen Jahren technische Bücher gelesen und bin auf eine hochtechnische High School gegangen, was mich daran gewöhnt haben muss, "trockene" Bücher zu lesen. Ich bevorzuge Bücher, in denen keine Haustiere mit mir reden und ablenken, sondern einfache Informationen, die ich aufnehmen kann.
Esteban Küber
27

Designmuster sind aus verschiedenen Gründen großartig:

  1. gibt Ihnen einen Einstieg in die Lösung häufiger Probleme.
  2. gibt Entwicklern ein Vokabular, um über bestimmte Möglichkeiten zur Lösung von Problemen auf sehr kompakte Weise zu sprechen.
  3. Wenn Sie mit Entwicklern zusammenarbeiten, die Entwurfsmuster kennen und Sie Entwurfsmuster in Ihren Lösungen verwenden, werden sie die Lösungen viel schneller verstehen.

Aber wenn Ihr Ziel nur darin besteht, Designmuster zu lernen, fehlen Ihnen wahrscheinlich die Grundlagen. Alle Entwurfsmuster basieren auf allgemeineren Prinzipien. Hohe Kohäsion, offenes geschlossenes Prinzip mit niedriger Kopplung, DRY, Liskov-Substitutionsprinzip usw. Für diese Grundlagen würde ich die folgenden Bücher in dieser Reihenfolge lesen:

  1. Head First Objektorientierte Analyse und Design (Head First) [ILLUSTRIERT] (Taschenbuch)
  2. Anwenden von UML und Mustern (Hardcover)
  3. Agile Prinzipien, Muster und Praktiken in C # (Robert C. Martin-Reihe) (Hardcover)

Danach sind Sie bereit für die Grundgruppe der vier Entwurfsmuster

  1. Head First Design Patterns (Head First) [ILLUSTRIERT] (Taschenbuch)
  2. Die Bibel
  3. Eine schöne Website (nichts kaufen, es lohnt sich nicht) http://dofactory.com/Patterns/Patterns.aspx (einige Implementierungen dieser Website sind eine Diskussion wert

Der nächste Schritt:

  1. Muster der Unternehmensanwendungsarchitektur (Addison-Wesley Signature Series) (Hardcover)
  2. Die POSA-Bücher

Und denken Sie immer daran: Das Muster ist nicht das Ziel!

KeesDijk
quelle
2
Ich denke, die Grundlagen von OO (Kapselung, Vererbung, Polymorphismus usw.) reichen aus, um mit dem Erlernen von Entwurfsmustern zu beginnen. Sie können die anderen Prinzipien (hohe Kohäsion, offenes geschlossenes Prinzip mit niedriger Kopplung, DRY, Liskov-Substitutionsprinzip usw.) durch Lernmuster lernen.
Bill the Lizard
Ich bin damit einverstanden, dass Sie Entwurfsmuster nur mit den Grundlagen von OO lernen können. Aber dann schaffen Sie es bis zu dem Punkt, dass Sie ein Muster zum Laufen bringen können, aber noch nicht vollständig verstehen, warum dies gutes Design ist, welche Kompromisse Sie eingegangen sind und wie Sie Variationen in den Mustern vornehmen können.
KeesDijk
20

Ich möchte hinzufügen, dass das Design Patterns- Buch aus der "Gang of Four" eine Bibel für alle ist, die sich ernsthaft für Design Patterns interessieren.

Leopold Cimrman
quelle
12
Oder für alle, die ihren Programmiererfreunden mitteilen möchten, dass sie das Gang of Four-Buch gelesen haben :)
Dave Markle
14

Mein Tipp:

Lesen Sie viel über die Muster aus verschiedenen Quellen.

Der Versuch, so viele Muster wie möglich in den gesamten Code zu zwingen, den Sie schreiben, da dieser Punkt keine guten Ergebnisse liefert. Lassen Sie die Informationen stattdessen eine Weile in Ihrem Gehirn ruhen (lesen Sie: Monate).

Plötzlich werden Sie auf ein Problem oder einen Code stoßen und sich vage daran erinnern, dass Sie etwas gesehen haben, das als Lösung für dieses spezielle Problem funktionieren könnte. Jetzt ist es an der Zeit, die Details des Musters, an das Sie denken, nachzuschlagen und zu versuchen, es anzuwenden.

Das hat sowieso für mich funktioniert.

Lars A. Brekken
quelle
9

Designmuster

Diese Tutorial-Site enthält die folgenden Unterabschnitte

  • Absicht jedes Entwurfsmusters
  • Reale Struktur für das Entwurfsmuster
  • Eine Problemstellung
  • Detaillierte Diskussion zum Problem
  • Checkliste, wie man zu einem Muster kommt
  • Faustregeln beim Erreichen des Musters.
  • Codefragmente für das Entwurfsmuster, das C #, C ++, Delphi, Java und PHP enthält

Diese Website enthält auch Anleitungen zu Anti-Patterns , UML und Refactoring .

pramodc84
quelle
Ich fand die Website sehr nützlich. Gute, klare Beispiele.
Augustas
8

Bruce Eckel hat ein Buch über Designmuster , obwohl es Java ist, ist es wie alle seine Bücher erstaunlich. Und das Beste ist, sie sind kostenlos!

Jan Gressmann
quelle
Vielen Dank für den Link, wusste nicht, dass das kostenlos online war.
James McMahon
5

Ein Einführungsbuch, das ich nützlich und gut geschrieben fand, ist Design Patterns Explained von Alan Shalloway und James Trott (Addison Wesley).

Alt-Text

Beginnen Sie nicht mit dem Gang of Four- Buch, denn es ist keineswegs ein Einführungsbuch.

Federico A. Ramponi
quelle
4

Ich würde empfehlen, einen Blick auf Jean Paul Boodhoos Quintologie (?) Zur Entmystifizierung von Designmustern auf DNRtv zu werfen. Die Videocasts berühren unter anderem Singleton, Abstract Factory - mit dem Unterschied, dass Sie ihm beim Codieren der Theorie beim Codieren zuschauen können. Gut, um an einem regnerischen Wochentag beim Mittagessen zu wachen.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92

David Pike
quelle
DnrTV ist ausgefallen! Es ist so schade, denn Boodhoos Screencasts sind informativ. Hast du die Videos gesehen, die irgendwo anders gehostet wurden? Haben Sie die Videodateien, würde ich sie gerne online halten.
Stephan Luis
4

Eine Anmerkung zu den obigen Kommentaren.

Eine Kurzreferenz für GOF-Muster

Hier ist ein guter Ort, an dem Sie dofactory.com/patterns/patterns.aspx starten können. Dort finden Sie einen Link zu jedem Muster sowie entsprechende Implementierungen.

Denken Sie jedoch daran, dass dies GOF-Muster sind. Möglicherweise müssen Sie auch erweiterte Muster lesen und verstehen, sobald Sie über ausreichende Kenntnisse in OOAD verfügen. Head First Design Patterns ist ein guter Anfang, und nachdem Sie einige Fortschritte erzielt haben, entscheiden Sie sich für Martin Fowlers Enterprise Application Architecture Patterns.

Anwenden von Entwurfsmustern - Der Denkprozess

Ein weiterer Hauptaspekt - Das Anwenden von Designmustern ist genauso wichtig wie das bloße Kennen. Das Lesen dieser Artikel könnte Ihnen ebenfalls helfen.

Anwenden von Entwurfsmustern Teil I.

Anwenden von Entwurfsmustern Teil II

Hoffe das hilft

amazedsaint
quelle
3

Head First Design Patterns ist gut, wie andere bereits erwähnt haben. Daneben natürlich das Originalbuch und C # Design Patterns. Es gibt auch gute Websites, die bereits erwähnt wurden.

Neben dem Selbstlernen empfehle ich dringend, eine Musterstudiengruppe in Ihrer Nähe zu gründen oder daran teilzunehmen . Siehe A Learning Guide To Design Patterns für Erklärungen und große Ordnung in die Muster zu studieren. Wir taten dies , und ich kann ehrlich sagen , dass ich nicht so viel verstehen würde , wie ich es jetzt tun. Ein wöchentliches Treffen mit anderen interessierten Personen hält Sie überraschend diszipliniert, wenn Sie etwas Abstraktes wie Designmuster lernen.

Viel Spaß beim Lernen!

mmiika
quelle
3

Bevor ich Geld für Bücher ausgeben würde, würde ich die Seite mit den hervorragenden Designmustern von Wikipedia empfehlen . Auch für etwas anderes Google für "Design Pattern Screencasts" oder Suche nach "Design Patterns" auf YouTube . Wenn dieselben Informationen unterschiedlich dargestellt werden, fällt der Penny oft ab.

Das Gang of Four- Buch ist der endgültige Text zu den bekanntesten Mustern, aber nicht so einfach zu lesen und mit C ++ - Beispielen nicht jedermanns Favorit.

Der Text " Head First Design Patterns" ist weitaus zugänglicher, enthält jedoch nur eine Teilmenge der Gang of Four-Muster.

Das Wichtigste ist zu verstehen, wo und warum ein bestimmtes Muster nützlich ist. Durchsuchen Sie anschließend das Web nach Implementierungsbeispielen in der Sprache Ihrer Wahl und experimentieren Sie, bis Sie es "verstanden" haben. Verstehen Sie ein Muster, bevor Sie zum nächsten übergehen. Jeder versteht einige Muster besser als andere (und es gibt Hunderte von weniger bekannten).

Einfach weiter einstecken.

Royd Brayshay
quelle
2

Muster der Unternehmensanwendungsarchitektur (Hardcover) von Martin Fowler

Refactoring to Patterns (Hardcover) von Joshua Kerievsky

Kontinuierliche Integration: Verbesserung der Softwarequalität und Risikominderung (Taschenbuch) von Paul Duval et al.

Jenseits der Softwarearchitektur: Erstellen und Aufrechterhalten erfolgreicher Lösungen (Taschenbuch) von Luke Hohmann

Elie
quelle
2

Entwurfsmuster sind wie jede Bibliotheksfunktion. Lesen Sie sie durch. Wenn ein Problem auftritt, befindet sich das Entwurfsmuster in Ihrer "Toolchest". Es gibt viele Bücher mit Designmustern, die alle nach den ursprünglichen Designmustern "Gang of Four" gestaltet sind.

Für jeden Programmierer sind das und das Refactoring-Buch von Fowler die absoluten Mindestanforderungen.

Bill K.
quelle
Die POSA-Bücher waren nicht "nach dem GOF-Muster gemustert" - der GOF wurde zufällig als erster veröffentlicht - sie wurden zur gleichen Zeit produziert.
Tim
1
Um Verwirrung zu vermeiden, möchte ich sagen, dass die meisten Entwurfsmuster NICHT in einer Bibliothek implementiert sind. Viele Muster werden durch Kombinieren von Bibliotheksklassen gebildet.
Bill the Lizard
Ich habe es so klingen lassen, als könnten sie in einer Bibliothek gemacht werden - Entschuldigung, danke für die Klarstellung, Bill. Entwurfsmuster sind im Allgemeinen wie Bibliotheken, aber Dinge, die Sie normalerweise nicht in eine Bibliothek einfügen können - wie verschiedene Arten der Interaktion von Klassen, die einander unbekannt sind.
Bill K
2

Eine sehr gute Website für Websites ist http://ajaxpatterns.org von einem der Entwickler der Ajaxian-Website

Ken Penn
quelle
2

Das Original- Design Patterns- Buch ist ein Muss für alle Programmierer.

Es ist ein ausgezeichnetes Buch auf jeder Ebene: Layout, Klarheit, Einsicht, Tiefe. Es ist eines dieser großartigen Bücher, die Sie zuerst von Anfang bis Ende lesen und dann als Referenz verwenden, bis Sie es buchstäblich genau kennen.

Sie könnten auf der Wikipedia-Seite beginnen , sich aber auch das großartige Buch gönnen.

ddaa
quelle
2

Anwenden von UML und Mustern von Craig Larman. Beginnen Sie mit den Grundlagen der Analyse, des Entwurfs und der Verwendung eines einfachen Fallszenarios. Führt die meisten Grundmuster auf einfache Weise ein.

skinp
quelle
2

Wenn Sie über Entwurfsmuster lesen, werden Sie feststellen, dass in Java einige davon implementiert sind.

Suchen Sie in der Quelle nach einem Framework, und Sie können Informationen zu Entwurfsmustern abrufen. Persönlich sehe ich nicht, dass sie perfekt zu meinem Code passen. Manchmal scheinen die Beispiele in Büchern und Tutorials ein wenig idealisiert zu sein, insbesondere für den Einzelcodierer.

Designmuster sind nichts für faule Programmierer.

Peter Turner
quelle
2

Für mich und meine Kollegen studieren Design Pattern das folgende auf Pattern Study Group . Sie erstellen eine Liste aller Muster, die wir in der richtigen Reihenfolge lernen sollten, und haben auch die Eröffnungsfragen, die mehr Diskussionen in der Gruppe ermöglichen.

Samnang
quelle
1

Ich schlage auch vor, dass Sie sich mit Refactoring to Patterns beschäftigen, sobald Sie Head First Design Patterns gelesen haben.

Hinweis: Die Codebeispiele befinden sich in Java, sollten jedoch den C # -Beispielen sehr ähnlich sein ...

Toolkit
quelle
1

Es macht für mich nicht allzu viel Sinn, wenn jemand mit sehr wenig Erfahrung zu tief in Designmuster eintaucht. Es ist toll zu wissen, dass es sie gibt, aber an diesem Punkt sollten Sie sich mehr auf andere Dinge konzentrieren, als nur etwas über Designmuster zu lernen.

Sie sind im Kontext eines Problems nützlich - als Konzept für einen neuen / Anfänger-Entwickler sind sie wirklich nicht zu praktisch, abgesehen davon, dass Sie sie nutzen sollten, wann und wo Sie können.

BEARBEITEN Zur Verdeutlichung: Viele Entwurfsmuster sind das Ergebnis von Problemen, die in einigen Bereichen auftreten. Von einem neuen Programmierer (IMO) ist kaum zu erwarten, dass er die Entwurfsmuster kennt, die für einige Probleme verwendet werden sollen. Gerade als wir in CS-Studien ein paar Algorithmen kennenlernen, müssen wir verstehen, was wir mit Mustern und ihren Vorteilen tun können, aber wenn eine Person noch eine Hallo-Welt baut oder stl entdeckt, besteht kaum praktischer Bedarf an Entwurfsmustern. Muster sind großartig. Aber sie sind nicht die Silberkugel.

(Weder war CASE (Tools), noch ist / war UML, noch ist SCRUM, weder ist TDD, noch STL, noch Java, noch XML usw.) Dies sind alles nur Aspekte unseres Berufs und diese Themen als das zweite zu behandeln Kommen ist naiv.

Tim
quelle
Wenn Sie jedoch nichts über die Muster wissen, wissen Sie nicht, ob es eines gibt, das Ihr spezielles Problem angeht. Ja, als Neuling brauchen Sie wahrscheinlich kein Muster, aber es ist wichtig, die Muster zu lernen, bevor diese Notwendigkeit entsteht.
Elie
Ich glaube, ich habe das in meinem Beitrag behandelt ...
Tim
Sie müssen mehr als nur wissen, dass sie existieren ... Sie müssen wissen, wie sie funktionieren und in welchen Situationen sie verwendet werden. Das ist ein bisschen mehr als oberflächliches Wissen. Es kann Jahre dauern, bis Sie ein Muster verwenden, aber wenn Sie dies tun, ist es nicht an der Zeit, das Muster zu lernen.
Elie
Sie sagen also, ein Neuling muss Dutzende oder mehr Muster lernen und verstehen? Was kommt in der Zwischenzeit vom Tisch? Ich argumentiere nicht gegen Muster. Und ich denke auch nicht, dass es eine schlechte Sache ist, die Besonderheiten einer Muster-JIT zu lernen. Muster vor anderen Dingen lernen IMO ist nicht nützlich
Tim
1

Muster umfassen das Vokabular, das Programmierer auf hoher Ebene verwenden, um über abstraktes Design zu sprechen. Wenn Sie eine abstrakte Lösung wiederverwenden, ist es hilfreich, sie mit Namen zu bezeichnen. Wenn Sie ein Muster erfinden, ist es professionell, ein wenig zu überprüfen, ob es noch keinen Namen hat. Wenn es benannt wurde, kann die Beschreibung hilfreich sein.

Nachdem Sie auch nur ein kleines bisschen codiert haben, werden Sie feststellen, dass Sie etwas Ähnliches schreiben, wie Sie es zuvor codiert haben. Dies ist ein Muster. Auch wenn es sich um ein winziges Muster handelt, ist es erwähnenswert. Gibt es ein besseres Muster? Sehen Sie bestimmte winzige Muster, die zusammenarbeiten, um ein größeres Problem zu lösen? Wenn Sie das nächste Mal ein größeres Problem lösen möchten, fällt Ihnen das gesamte Muster als einzelnes Stück ein. Das Ausarbeiten der detaillierten Codezeilen wird mechanisch.

Je mehr Sie Muster bemerken, desto einfacher wird die Programmierung und desto mehr werden Sie einige der größten und besten Muster schätzen, die von anderen Programmierern ausgearbeitet wurden. Versuchen Sie, das MVC-Muster zu beherrschen. Auf die eine oder andere Weise tauchen überall Variationen auf, selbst bei winzigen Designentscheidungen.

Dongilmore
quelle
1

Wenn Sie das Konzept verstanden haben, gehen Sie den Eclipse-Quellcode oder das Eclipse-Design durch, viele wirklich gute Beispiele für diese Muster (keine Überraschung, Gamma war einer der Designer).

Uri
quelle