Was ist das am häufigsten verwendete Entwurfsmuster? [geschlossen]


24

Welches Designmuster ist Ihrer Meinung nach am beliebtesten?


Beide, wenn möglich ...
Tamara Wijsman

"Schalter statt Polymorphismus"?
mlvljr

@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. :-)
Tamara Wijsman

Antworten:


39

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


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.


2
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 .


2
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


7

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.


5

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.


5

Strategie-Muster

Wenn Sie jemals Abhängigkeitsinjektion verwendet haben, haben Sie das Strategiemuster verwendet.


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?


3

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.


3

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.


2

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).


1
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.


1

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).




0

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.

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.