@Bigown: Dann solltest du die Antwort "akzeptieren", die dir am besten gefallen hat. Wenn Ihnen eine der Antworten nicht gefällt, bieten Sie bitte ein Kopfgeld an.
Macneil
2
als nicht konstruktiv eingestuft - dies ist im Grunde eine Umfrage. Sofern nicht jemand eine empirische Studie zu zitieren hat, lauten die Antworten alle Vermutungen oder Favoriten (oder Nicht-Favoriten), und die Abstimmungen spiegeln persönliche Gefühle wider. Das Endergebnis ist eine Liste von Entwurfsmustern ohne Tiefe. Daher nicht konstruktiv.
Steven A. Lowe
@Steven: Ich bin mir ziemlich sicher, dass Jay mit The Big Ball of Mud Recht hat. :-)
Stimmen Sie zu, wenn Sie ein neues Projekt starten, ist alles gut strukturiert und dokumentiert, aber wenn sich die Frist nähert, endet alles wie ein großer Schlammball
Arturo Molina,
3
@Arturo - Das ist ein möglicher Grund. Andere: 1) Kleines Projekt, das von unerfahrenen Programmierern gestartet wurde, das unerwartet erfolgreich ist und dann über seinen ursprünglichen Zweck hinauswächst. 2) Die Tendenz, dass unerfahrene Programmierer mit der Wartung beauftragt werden, die dann keine Anleitung oder Verständnis für die ursprüngliche Architektur haben, also hacken sie einfach Sachen hinein und es wird schlimmer, wenn das System altert. 3) Das Team verwendet die falsche Technologie oder eine neue Technologie, mit der es nicht vertraut ist und die es bei einem neuen Projekt nur unzureichend einsetzt, und sie krater vor Ablauf der Frist :)
Jay,
1
LOL - wenn ich Ihnen mehr Punkte hinzufügen könnte, würde ich. Hervorragende (und traurige) Beobachtung.
Luis.espinal
25
MVC und seine Variationen gehören definitiv zu den Top-Designmustern.
Ich wollte sagen, dass die Frage des OP ziemlich albern ist (ich glaube es immer noch). Ihre Antwort ist jedoch ziemlich richtig, IMO. Wenn es ein Muster (und seine Variationen) gibt, das ziemlich konsequent verwendet wird, dann ist es dieses. +1 für deine gute Antwort.
Luis.espinal
21
Wenn Sie über Gang-of-Four- Designmuster sprechen, würde ich Singleton sagen . Dies ist ein wirklich trauriger Zustand - fast so, als würden Programmierer von der Magie der Designmuster erfahren und einfach nach dem ersten innehalten.
Wenn Sie über Architekturmuster sprechen (mit anderen Worten, Entwurfsmuster, die mehrere Klassen oder Ebenen umfassen), würde ich MVC sagen . Einige andere beliebte sind das Repository- Muster und der Service-Locator .
Es ist noch trauriger, wenn man bedenkt, dass viele Leute Singleton als Gegenmuster betrachten!
RichardOD
1
@RichardOD, traurig, dass die Leute es für eines halten, wenn es nicht so ist, oder traurig, dass die Leute es benutzen, wenn es ein Anti-Pattern ist?
Matt Olenik
Ich meine, es ist traurig, dass es so beliebt ist - es scheint ein Interview-Favorit zu sein. Als ich das letzte Mal interviewt wurde, wurde ich gefragt, wie ich einen Singleton codieren würde, und meine Antwort war, dass ich keinen IoC-Container wie Unity verwenden würde, um das für mich zu erledigen.
RichardOD
@RichardOD - es ist kein Einzelfall, dass es als Anti-Pattern angesehen wird. Es ist der Missbrauch, der ein Anti-Muster darstellt. In sehr wenigen Fällen wird Singleton tatsächlich benötigt bzw. benötigt, und in Umgebungen mit Containern, die die Ressourcengranularität steuern, werden sie nicht einmal benötigt. Wenn Sie sehen , einen Singleton in einer modernen Java Code - Basis, zum Beispiel, die für eine anti-Muster ein typischerweise eine rote Fahne ist Nutzung (nicht auf dem Singletonmuster selbst.)
luis.espinal
@Jaco - Ich hätte eine andere Einstellung als du. Ich denke, Komposit, Strategie und Vorlage (und ihre mehrfachen Reinkarnationen) sind weitaus weiter verbreitet als Singleton, insbesondere seit wir uns in den letzten zehn Jahren auf die strukturelle Komposition über die Vererbung konzentriert haben.
Luis.espinal
16
Beobachter
Wenn Sie jemals ein Ereignis verwendet haben. Sie haben Observer verwendet.
Denken Sie an eine REST-Schnittstelle wie Twitter oder die SO-APIs. Es verbirgt eine Menge Back-End-Sachen, die zumindest im Zweifelsfall fürchterlich komplex sein können.
Interessiert es mich, in welchen db tables @ apklusk-Tweets sie gespeichert sind? Und dass es einen schnellen Cache hat? Und dass @shemnon so wenig Leser hat, dass die Tweets immer keinen Speicher mehr haben? Das ist die Magie der Fassade.
Einverstanden, Strategie zusätzlich zu Vorlage und Composite (und ihre vielfältigen Variationen und Kombinationen.)
Luis.espinal
5
Warum hat noch niemand den Iterator erwähnt ? Besonders bei all den Karten, die komplexe Datenstrukturen bilden ... es ist die, die ich am häufigsten benutze. Oder sprechen wir über Muster, die wir neu implementieren?
Ich bin überrascht, dass niemand das Factory-Muster erwähnt hat, nach meiner Erfahrung eines der am häufigsten verwendeten (und auch am häufigsten missbrauchten) Muster da draußen. Wenn nicht zuerst, wahrscheinlich sollte der Singleton zuerst sein, hätte ich gedacht, dass dies eine knappe Sekunde sein würde.
Zusammen mit meiner vorherigen Antwort werde ich eine neue hinzufügen, die ich heute von meinem Biest eines geerbten Projekts getroffen habe:
Kopieren Einfügen
Während des Debuggens stieß ich auf einen Code, der zwei Funktionen mit ähnlichem Namen aufrief:
if(x)
Func1
else
Func2
Func1 und Func2 hatten die gleichen Parameter. Ich habe sie herausgezogen und unterschieden, und sie sind zu 100% gleich, außer dass Func1 Func3 und Func2 Func4 aufruft. Ich zog die heraus und differenzierte sie. 100% gleich, bis auf 1 Zeile. Ein früherer Programmierer entschied sich daher, zwei in 50 Zeilen verschachtelte Funktionen zu kopieren und an genau einer Stelle zwei private Funktionen einzufügen, anstatt einen Flag-Parameter hinzuzufügen. Es bringt mich dazu zu weinen.
Ich kann mir kein Programm vorstellen, das das Observer-Muster nicht verwendet. Wie Jaco erwähnte, wird Singleton auch sehr oft verwendet, leider ist es zu einem Hammer geworden (jeder Programmierer verwendet es, auch wenn es nicht vollständig benötigt wird).
Witzig, aber ich musste noch nie einen Singleton verwenden. Wenn ich einen Speicherort für den globalen Status benötige, füge ich ihn in eine Konfigurationsdatei ein und verwende eine normale Klasse, um darauf zuzugreifen.
Robert Harvey
In diesen Fällen wird es natürlich nicht benötigt ... was ist, wenn Sie wirklich ein Objekt benötigen, um eine Aufgabe zu erledigen, synchron und threadsicher. Singleton dient nicht nur dazu, den Status einiger statischer Variablen zu speichern, es ist ein echtes Objekt mit echten Aufgaben usw.
Cristian
Die einzige Zeit, die ich jemals für nötig gehalten habe, sind Datenbankverbindungen. Das heißt, fast jede "Service" -Klasse (gelesen: ähnlich wie Factory) in diesem Projekt ist ein Singleton, der in der PHP- $_SESSIONVariablen gespeichert ist.
Tarka
2
Dolmetscher
Selten implementiert, oft benutzt. XPATH-, XSLT-, Regex-, jQuery-Selektoren usw.
Ich bin überrascht, dass noch niemand "Builder" gesagt hat. Oder "Adapter". Sie sind wahrscheinlich nicht so exotisch wie einige der anderen genannten, aber ich benutze sie die ganze Zeit. Factory und Abstract Factory sind ebenfalls weit verbreitet (aber sie sind bereits vergeben).
Auf der Ebene des Softwaredesigns würde ich argumentieren, dass Composite, Strategie und Vorlage (und in geringerem Maße Factory) am häufigsten verwendet werden. Seit etwa einem Jahrzehnt bevorzugen wir die Komposition gegenüber der Vererbung, wenn wir unsere Systeme mit einem OO-Design erstellen. Infolgedessen spielt die Kombination der eben erwähnten Muster eine viel wichtigere Rolle als alle anderen IMO.
Architektonisch würde ich für MVC im Unternehmen und für Muster auf der Grundlage von Zustandsautomaten auf der eingebetteten Seite der Dinge argumentieren.
Antworten:
Ich bin mir ziemlich sicher, dass "The Big Ball of Mud" am häufigsten vorkommt. Leider für uns alle.
http://en.wikipedia.org/wiki/Big_ball_of_mud
quelle
MVC und seine Variationen gehören definitiv zu den Top-Designmustern.
quelle
Wenn Sie über Gang-of-Four- Designmuster sprechen, würde ich Singleton sagen . Dies ist ein wirklich trauriger Zustand - fast so, als würden Programmierer von der Magie der Designmuster erfahren und einfach nach dem ersten innehalten.
Wenn Sie über Architekturmuster sprechen (mit anderen Worten, Entwurfsmuster, die mehrere Klassen oder Ebenen umfassen), würde ich MVC sagen . Einige andere beliebte sind das Repository- Muster und der Service-Locator .
quelle
Beobachter
Wenn Sie jemals ein Ereignis verwendet haben. Sie haben Observer verwendet.
quelle
Dekorateur
Hinzufügen von Funktionen zu einem Objekt zur Laufzeit durch Komposition. Mein persönlicher Favorit.
Edit: Auch Factory ist wohl eine der gebräuchlichsten.
quelle
Fassade
Denken Sie an eine REST-Schnittstelle wie Twitter oder die SO-APIs. Es verbirgt eine Menge Back-End-Sachen, die zumindest im Zweifelsfall fürchterlich komplex sein können.
Interessiert es mich, in welchen db tables @ apklusk-Tweets sie gespeichert sind? Und dass es einen schnellen Cache hat? Und dass @shemnon so wenig Leser hat, dass die Tweets immer keinen Speicher mehr haben? Das ist die Magie der Fassade.
quelle
Strategie-Muster
Wenn Sie jemals Abhängigkeitsinjektion verwendet haben, haben Sie das Strategiemuster verwendet.
quelle
Warum hat noch niemand den Iterator erwähnt ? Besonders bei all den Karten, die komplexe Datenstrukturen bilden ... es ist die, die ich am häufigsten benutze. Oder sprechen wir über Muster, die wir neu implementieren?
quelle
Ich bin überrascht, dass niemand das Factory-Muster erwähnt hat, nach meiner Erfahrung eines der am häufigsten verwendeten (und auch am häufigsten missbrauchten) Muster da draußen. Wenn nicht zuerst, wahrscheinlich sollte der Singleton zuerst sein, hätte ich gedacht, dass dies eine knappe Sekunde sein würde.
quelle
Zusammen mit meiner vorherigen Antwort werde ich eine neue hinzufügen, die ich heute von meinem Biest eines geerbten Projekts getroffen habe:
Kopieren Einfügen
Während des Debuggens stieß ich auf einen Code, der zwei Funktionen mit ähnlichem Namen aufrief:
Func1 und Func2 hatten die gleichen Parameter. Ich habe sie herausgezogen und unterschieden, und sie sind zu 100% gleich, außer dass Func1 Func3 und Func2 Func4 aufruft. Ich zog die heraus und differenzierte sie. 100% gleich, bis auf 1 Zeile. Ein früherer Programmierer entschied sich daher, zwei in 50 Zeilen verschachtelte Funktionen zu kopieren und an genau einer Stelle zwei private Funktionen einzufügen, anstatt einen Flag-Parameter hinzuzufügen. Es bringt mich dazu zu weinen.
quelle
Ich kann mir kein Programm vorstellen, das das Observer-Muster nicht verwendet. Wie Jaco erwähnte, wird Singleton auch sehr oft verwendet, leider ist es zu einem Hammer geworden (jeder Programmierer verwendet es, auch wenn es nicht vollständig benötigt wird).
quelle
$_SESSION
Variablen gespeichert ist.Dolmetscher
Selten implementiert, oft benutzt. XPATH-, XSLT-, Regex-, jQuery-Selektoren usw.
quelle
Ich bin überrascht, dass noch niemand "Builder" gesagt hat. Oder "Adapter". Sie sind wahrscheinlich nicht so exotisch wie einige der anderen genannten, aber ich benutze sie die ganze Zeit. Factory und Abstract Factory sind ebenfalls weit verbreitet (aber sie sind bereits vergeben).
quelle
Spezifikation
Ich glaube nicht, dass es in der GoF aufgeführt ist, aber ich verwende ständig Variationen davon.
quelle
Das am häufigsten verwendete Designmuster ist natürlich Spaghetti .
quelle
Auf der Ebene des Softwaredesigns würde ich argumentieren, dass Composite, Strategie und Vorlage (und in geringerem Maße Factory) am häufigsten verwendet werden. Seit etwa einem Jahrzehnt bevorzugen wir die Komposition gegenüber der Vererbung, wenn wir unsere Systeme mit einem OO-Design erstellen. Infolgedessen spielt die Kombination der eben erwähnten Muster eine viel wichtigere Rolle als alle anderen IMO.
Architektonisch würde ich für MVC im Unternehmen und für Muster auf der Grundlage von Zustandsautomaten auf der eingebetteten Seite der Dinge argumentieren.
quelle