Gibt es ein kanonisches Buch über Designmuster? [geschlossen]

49

Ich interessiere mich für das Erlernen von Entwurfsmustern und möchte wissen, was als erstklassige Bücher für das Erlernen dieses Themas gelten.

Gibt es ein Buch, das de facto als Standard für die Beschreibung von Best Practices, Entwurfsmethoden und anderen hilfreichen Informationen zu Entwurfsmustern gilt? Was macht dieses Buch so besonders?

mW00t
quelle
Ich bin mir nicht sicher, ob Sie darüber nachdenken, aber ich finde bei Forrst viele clevere Entwicklungsaufgaben .
Trey Piepmeier
2
Wie wäre es mit einem Titel von "Referenzquellen für Entwurfsmuster" oder "Entwurfsmusterressourcen" (da ich "Referenz" nicht als "Nachschlagen bei Bedarf" bezeichne) und all das Listenmaterial in den Textkörper zu verschieben (oder es zu entfernen) )?
Für einige anständige Implementierungen habe ich mir die auf dofactory angesehen (kaufte die Bücher aber nicht).
Steven Evers
4
Da diese Frage eine vollständige und umfassende Antwort erhalten hat, habe ich die anderen Entwurfsmusterfragen als Duplikate dieser Frage geschlossen, um sie als kanonisches Q & A- und Antwortpaar für dieses Thema zu kennzeichnen.

Antworten:

58

Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software kommen meiner Definition eines kanonischen Buches über Entwurfsmuster sehr nahe. In seinem Wikipedia-Artikel (Schwerpunkt Mine) heißt es:

Das ursprüngliche Erscheinungsdatum des Buches war der 21. Oktober 1994 mit einem Copyright von 1995. Ab Juli 2010 wurde das Buch zum 38. Mal gedruckt . Das Buch wurde erstmals im Oktober 1994 beim OOPSLA-Treffen in Portland, Oregon, der Öffentlichkeit zugänglich gemacht. Es hat großen Einfluss auf das Gebiet der Softwareentwicklung und gilt als wichtige Quelle für die Theorie und Praxis des objektorientierten Designs. Mehr als 500.000 Exemplare wurden auf Englisch und in 13 weiteren Sprachen verkauft .

Ward Cunningham , ein Pionier im Bereich Design Patterns, unterhält auf WikiWikiWeb einen Online-Katalog der Patterns des Buches . Und laut Wikipedia-Artikel über Designmuster (wieder Hervorhebung von mir):

Design Patterns wurden in der Informatik immer beliebter, nachdem das Buch Design Patterns: Elemente wiederverwendbarer objektorientierter Software 1994 von der sogenannten "Gang of Four" (Gamma et al.) Veröffentlicht wurde .

Es gibt eine ganze Reihe anderer Bücher, auf die im selben Artikel verwiesen wird, wie es im Genre der Fall ist:

Von denen, die ich in Fowlers Buch gelesen habe, ist es sehr einflussreich und eine gute Lektüre. An bestimmten Stellen ist es für meinen Geschmack etwas vage, aber insgesamt ist es ein unterhaltsames Buch. Es gibt einen Online-Katalog der im Buch enthaltenen Muster mit minimalen Beschreibungen.

Ich habe auch Head First Design Patterns durchgesehen und wenn Sie ein anderes Buch der Head First-Reihe gelesen haben, ist es von der gleichen hohen Qualität und macht genauso viel Spaß wie die meisten Bücher der Reihe :

Head First ist eine Reihe von einführenden Lehrbüchern zu vielen Themen, die von O'Reilly Media herausgegeben werden. Es betont eine unorthodoxe, visuell intensive, leserintensive Kombination aus Rätseln, Witzen, nicht standardisiertem Design und Layout und einem einnehmenden, gesprächigen Stil, um den Leser in ein bestimmtes Thema einzutauchen.

Der Begriff "Entwurfsmuster" ist etwas vage, da jede allgemeine wiederverwendbare Lösung als Entwurfsmuster betrachtet werden kann. Ich habe immer eine Tendenz bemerkt, das Etikett auf den Lösungen anzubringen, die in einem der oben aufgelisteten bemerkenswerten Bücher beschrieben sind, und insbesondere in den Büchern der Bande der Vier und Fowler. Entwurfsmuster folgen keinem einzigartigen Entwicklungsprozess. Sie sind normale Softwarelösungen, die immens wiederverwendbar und äußerst schwer zu identifizieren sind .

Wenn Sie jedoch die Online-Kataloge beider Bücher mit dem Inhalt sprachspezifischer Bücher vergleichen, werden Sie feststellen, dass diese häufig als Vorlagen verwendet werden. Ich würde also sagen, dass beide Bücher fast kanonische Referenzen sind, wobei das GoF-Buch aus historischer Sicht das wichtigere ist, obwohl beide Bücher auf objektorientierte Programmierung beschränkt sind .

yannis
quelle
2
+1. Eigentlich wollte ich dir +5 geben, aber leider ist das nicht erlaubt.
Dipan Mehta
In der gesamten Serie "Pattern-Oriented Software Architecture" geht es um Muster in verschiedenen Systemtypen. In Band 1 geht es um Architekturmuster und Muster, die Domänen überkreuzen. In Band 2 geht es um gleichzeitige Systeme. In Band 3 geht es um Ressourcenverwaltung in vernetzten / verteilten Systemen. In Band 4 geht es um verteilte Systeme, und in Band 5 geht es um Mustersprachen sowie um eine Referenz für die anderen 4 Bände. Angesichts der Frage denke ich, dass Band 5 auch anwendbar sein könnte, aber ich habe nicht zu viel Zeit damit verbracht ... bis jetzt.
Thomas Owens
@Yannis this one and head first basiert im Allgemeinen auf statisch typisierten Sprachen. Gibt es gute Bücher für dynamische Sprachen wie Python?
Ravi404
@ ravi404 norvig.com/design-patterns
whytheq
27

Das Vierergruppen-Buch - Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software ist wahrscheinlich das, was wir einem Industriestandard für Entwurfsmuster am nächsten kommen.

Für eine leicht zugängliche Einführung ist Head First: Design Patterns ebenfalls gut. Lassen Sie sich vom „trendigen“ Cover nicht abschrecken, da es eine gute Lektüre ist und Ihnen wahrscheinlich helfen wird, die Konzepte im GoF-Buch besser zu verstehen, wenn Sie es zuerst lesen.

richeym
quelle
23

Head First Design Patterns

Zu jedem Zeitpunkt hat irgendwo auf der Welt jemand mit den gleichen Software-Design-Problemen zu kämpfen, die Sie haben. Sie wissen, dass Sie das Rad (oder noch schlimmer einen platten Reifen) nicht neu erfinden möchten, und schauen sich Design Patterns an - die Lehren, die diejenigen gezogen haben, die mit den gleichen Problemen konfrontiert waren. Mit Design Patterns können Sie die Best Practices und Erfahrungen anderer nutzen, um Ihre Zeit für ... etwas anderes zu verwenden. Etwas herausfordernderes. Etwas komplexeres. Etwas mehr Spaß.

Sie möchten mehr über die Muster erfahren, die wichtig sind - warum sie verwendet werden, wann sie verwendet werden, wie sie verwendet werden (und wann sie NICHT verwendet werden sollen). Aber Sie möchten nicht nur sehen, wie Muster in einem Buch aussehen, sondern auch, wie sie "in freier Wildbahn" aussehen. In ihrer heimischen Umgebung. Mit anderen Worten, in realen Anwendungen. Sie möchten auch lernen, wie Muster in der Java-API verwendet werden und wie Sie die in Java integrierte Musterunterstützung in Ihrem eigenen Code ausnutzen.

Sie möchten die wirklichen OO-Gestaltungsprinzipien kennen lernen und wissen, warum alles, was Ihr Chef Ihnen über die Vererbung erzählt hat, möglicherweise falsch ist (und was Sie stattdessen tun sollten). Sie möchten erfahren, wie diese Grundsätze Ihnen helfen, wenn Sie das nächste Mal einen Bach ohne Designmuster hinaufsteigen.

Am wichtigsten ist, dass Sie die "geheime Sprache" von Design Patterns erlernen möchten, damit Sie mit Ihrem Kollegen mithalten können (und Cocktailparty-Gäste beeindrucken können), wenn er beiläufig seine erstaunlich geschickte Verwendung von Command, Facade, Proxy und erwähnt Fabrik zwischen einem Schluck Martini. Sie können sich leicht auf Ihr tiefes Verständnis einlassen, warum Singleton nicht so einfach ist, wie es sich anhört, wie die Factory so oft missverstanden wird oder in Bezug auf die reale Beziehung zwischen Dekorateur, Fassade und Adapter.

Mit Head First Design Patterns vermeiden Sie die Peinlichkeit zu denken, dass Decorator etwas aus der Show "Trading Spaces" ist ...

Gordon
quelle
Diese. Es ist eine sehr leicht zugängliche Lektüre und hat meine Herangehensweise an das Software-Engineering grundlegend verändert.
GSto
2
Die gesamte Head-First-Serie ist großartig, besonders zum Starten von Entwicklern.
Thomas Stock
2
Ich liebe das Buch, aber ich hasse das Cover! Ein Kollege von mir, der kein Programmierer war, kam neulich in mein Büro, sah sich das Buch an und sagte: "Head First Designer Patterns? Steigen Sie in die Modebranche ein?"
Pete
1
@Pete Warum die Abdeckung Sie in mehr Schwierigkeiten bringen kann. Sie lebt offenbar ein Doppelleben. fishbowl.pastiche.org/2005/08/12/…
Gordon
10

Ja, es gibt ein bekanntes Buch über Entwurfsmuster: Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software. Die Autoren werden häufig als "Gang of Four" (GoF) bezeichnet und in fast allen Texten zu Entwurfsmustern erwähnt.

Jonas
quelle
Dies ist kein Buch über Designmuster. Es ist ein Katalog von Mustern. Am Anfang gibt es eine kurze Einführung in Design Patterns, aber ich denke nicht, dass diese Einführung ausreicht.
Jörg W Mittag
@ JörgWMittag Es gibt keinen einzigartigen Prozess zum Erstellen von Designmustern, Designmuster sind relativ kleine wiederverwendbare Lösungen. Entwurfsmuster werden durch die normalen Prozesse der Softwareentwicklung erstellt. Was sie auszeichnet, ist ihre immense Wiederverwendbarkeit. Der einzig relevante Prozess besteht darin, eine Lösung als Entwurfsmuster zu identifizieren, und Kataloge tun dies genau.
Yannis
9

Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software

Alt-Text

Aus Wikipedia :

Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software ist ein Softwareentwicklungsbuch, das wiederkehrende Lösungen für häufige Probleme im Softwareentwurf beschreibt. Autoren des Buches sind Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides mit einem Vorwort von Grady Booch. Die Autoren werden oft als Gang of Four, GoF oder Go4 bezeichnet. Das Buch ist in zwei Teile gegliedert. In den ersten beiden Kapiteln werden die Möglichkeiten und Gefahren der objektorientierten Programmierung erläutert. In den verbleibenden Kapiteln werden 23 klassische Muster für das Software-Design beschrieben. Das Buch enthält Beispiele in C ++ und Smalltalk.

Piers Myers
quelle
3

Eine der besten Websites für Designmuster ist Ward's Wiki, das allererste Wiki. Siehe http://c2.com/cgi/wiki?HistoryOfPatterns für eine gute Ausgangs Seite in ihm.

1987 konsultierten Ward und Kent die Semiconductor Test Systems Group von Tektronix, die Probleme hatte, ein Design fertigzustellen. Sie beschlossen, das Mustermaterial auszuprobieren, das sie studiert hatten. Wie Alexander sagte, die Bewohner eines Gebäudes sollten es entwerfen, ließen Ward und Kent Vertreter der Benutzer (einen Trainer und einen Außendiensttechniker) das Design fertigstellen.

Ward entwickelte eine "Sprache" mit fünf Mustern, mit deren Hilfe die unerfahrenen Designer die Stärken von Smalltalk nutzen und seine Schwächen vermeiden konnten ...

Ward und Kent waren erstaunt über die (zugegebenermaßen spartanische) Eleganz der Benutzeroberfläche, die ihre Benutzer entworfen hatten. Sie berichteten über die Ergebnisse dieses Experiments bei OOPSLA 87 in Orlando. Sie schrieben eine Podiumsposition auf und stellten in Norm Kerths Workshop „ Woher kommen Gegenstände?“ Vor. Sie unterhielten sich über Muster, bis sie blau im Gesicht waren, und waren sich einig, aber ohne konkretere Muster meldete sich niemand an.

In der Zwischenzeit war Erich Gamma im Rahmen seiner Doktorarbeit damit beschäftigt, über objektorientiertes Design in ET ++ zu schreiben und darüber nachzudenken. Erich hatte erkannt, dass wiederkehrende Designstrukturen oder -muster wichtig waren. Die Frage war wirklich, wie man sie erfasst und kommuniziert.

Bruce Anderson hielt einen Vortrag bei TOOLS 90, bei dem ErichGamma anwesend war. Erich gefiel das Gespräch. Bruce hielt einen Vortrag bei EcoopOopsla90 (Ottawa) und leitete eine BOF namens Toward an Architecture Handbook, in der er, Erich Gamma, Richard Helm und andere über Muster diskutierten. Dies war das erste Mal, dass Richard und Erich sich trafen, und sie stellten fest, dass sie gemeinsame Ideen zu den Schlüsselideen beim Schreiben wiederverwendbarer OO-Software hatten.

Kurz vor der ECOOP'91 stellten Erich Gamma und Richard Helm, die an einem schwülen Sommertag auf einem Dach in Zürich saßen, die sehr bescheidenen Anfänge des Musterkatalogs zusammen, der schließlich zu DesignMustern werden sollte ...

Beim OOPSLA-Workshop, den Bruce 1991 durchführte, ging es richtig zur Sache. Zufälligerweise waren Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides alle da; Sie wurden später die vierköpfige Bande , die das Design Patterns- Buch verfasste ...

Gaurav
quelle
2

Ich denke, dass das Refactoring zu Mustern einfach deshalb nützlich sein kann, weil es beschreibt, wie bestimmte Entwürfe / Codes in Bezug auf Muster im GoF-Buch refactored werden können. Dies kann helfen, die anfängliche Lernkurve zu überwinden. Oh und es wird auch über "Musterglück" nachgedacht :)

Sie können auch die ersten drei Bände der musterorientierten Softwarearchitektur als eine gute Lektüre ansehen.

finrod
quelle
1

Designmuster

Diese Tutorial-Site enthält die folgenden Unterabschnitte

  • Absicht jedes Entwurfsmusters
  • Real World Structure für das Entwurfsmuster
  • Eine Problemstellung
  • Ausführliche Diskussion zum Problem
  • Checkliste, wie man zu einem Muster kommt
  • Faustregeln beim Erreichen des Musters.
  • Code-Schnipsel für das Entwurfsmuster, das C #, C ++, Delphi, Java und PHP enthält

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

pramodc84
quelle
Die SourceMaking-Site sieht auf den ersten Blick simpel aus, ist aber eine großartige Referenz. Abgesehen von den Entwurfsmustern sind einige der Antimuster für Entwicklung, Architektur und Projektmanagement urkomisch. Die überarbeiteten Lösungen können Ihnen tatsächlich dabei helfen, ein Meeting zu retten, das aus dem Ruder läuft. (Nicht schlecht für eine Design-Muster-Referenz)
Was auch immer
1

Das ursprüngliche Buch "Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software" ist eine gute Ressource für objektorientierte Entwurfsmuster.

Es gibt viele andere Bücher da draußen. Wenn ich eine Kurzreferenz benötige und mein GoF-Buch nicht in Reichweite ist, verfügt Wikipedia normalerweise über genügend Informationen zu diesen und anderen Entwurfsmustern.

Das sind die primären, die ich benutze. Es sollte auch beachtet werden, dass Leute damit begonnen haben, das Musterformat auf andere Dinge anzuwenden, wie zum Beispiel Projektmanagement.

Wenn Sie sich mit Antimustern beschäftigen möchten, die Sie kennen sollten, finden Sie in den beiden Büchern "AntiPatterns: Refactoring von Software, Architekturen und Projekten in der Krise" und "Refactoring: Verbessern des Designs von vorhandenem Code" einen Abschnitt Code riecht, ein anderer Name für Antimuster.

indyK1ng
quelle
1

"Agile Prinzipien, Muster und Praktiken in C #" von Robert C. Martin. Ich denke, er hat auch eine Java-Version des Buches.

Auch nicht ein Muster selbst, aber Domain Driven Design hat einige großartige Konzepte, auch wenn Sie sich nicht für den vollständigen DDD-Ansatz entscheiden.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

quelle
1

Wenn Sie sich speziell für Entwurfsmuster in C ++ interessieren, probieren Sie Modern C ++ Design von Andrei Alexandrescu.

In diesem Buch wird erläutert, wie häufig verwendete Muster wie Factory, Singleton und Visitor in C ++ implementiert werden. Es werden auch sehr C ++ - spezifische Themen wie intelligente Zeiger, Vorlagenmetaprogrammierung und richtlinienbasiertes Klassendesign behandelt.

Buchautor ist ein maßgeblicher Experte , bekannt für seine

Pionierarbeit in Bezug auf richtlinienbasiertes Design, implementiert durch Template-Metaprogrammierung. Diese Ideen kommen in seinem Buch Modern C ++ Design zum Ausdruck und wurden erstmals in seiner Programmierbibliothek Loki implementiert. In seiner MOJO-Bibliothek hat er auch das Konzept "move constructors" implementiert. Er trug zum C / C ++ Users Journal unter der Zeile "Generic <Programming>" bei ...

Dima
quelle
1
Würde es Ihnen etwas ausmachen, mehr darüber zu erklären, was es tut und wofür es gut ist? „Link-only Antworten“ sind nicht ganz willkommen bei Stapelaustausch
gnat
@gnat: wie ist das?
Dima
Nun, deine letzte Bearbeitung scheint mir sicherlich eine Verbesserung zu sein. Obwohl die Leser der Antwort würden wahrscheinlich von einer ausführlicheren Erklärung profitieren , das ist Aleksandresku
gnat
@gnat: Da du offensichtlich weißt, wer er ist, kannst du meine Antwort gerne bearbeiten.
Dima