Was ist ein Anti-Muster?
Ich studiere patterns und anti-patterns. Ich habe eine klare Vorstellung über die Muster, aber ich nicht, um anti-patterns. Definitionen aus dem web und Wikipedia verwirren mich sehr.
Kann jemand mir erklären, in einfachen Worten, was ein anti-pattern ist? Was ist der Zweck? Was tun Sie? Ist es eine schlechte Sache oder eine gute Sache?
InformationsquelleAutor der Frage g.revolution | 2009-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anti-patterns sind bestimmte Muster in der software-Entwicklung, die als schlechter Programmierstil.
Im Gegensatz zu design patterns die gemeinsame Herangehensweisen an Probleme, die wurden formalisiert und werden im Allgemeinen als eine gute Entwicklung, Praxis, anti-patterns sind das Gegenteil und sind unerwünscht.
Beispielsweise in Objekt-orientierten Programmierung, die Idee ist die Trennung der software in kleine Stücke, die als Objekte bezeichnet werden. Ein anti-pattern in der objektorientierten Programmierung ist ein Gott-Objekt führt eine Vielzahl von Funktionen, die besser getrennt in verschiedenen Objekten.
Beispiel:
Obigen Beispiel hat ein Objekt, die alles. In der objektorientierten Programmierung, es wäre vorzuziehen, haben definierte Verantwortlichkeiten für die verschiedenen Objekte zu halten, den code weniger gekoppelt und letztlich mehr wartbar:
Die bottom line ist, gibt es gute Wege, software zu entwickeln, mit Häufig verwendeten Muster (design patterns), aber es gibt auch Möglichkeiten, mit denen software entwickelt und implementiert, was zu Problemen führen kann. Muster, die als schlechte software development practices-anti-patterns.
InformationsquelleAutor der Antwort coobird
Wann immer ich höre über Anti-patterns, ich erinnere mich, ein weiterer Begriff, nämlich. Design Geruch.
"Design Gerüche sind bestimmte Strukturen in der Konstruktion, die angeben, dass die Verletzung von grundlegenden design-Prinzipien und negative Auswirkungen auf die design-Qualität". (Aus "Refactoring for Software Design Smells: Managing technical debt")
Gibt es viele design-Gerüche klassifiziert Verletzung von design-Prinzipien:
Abstraktion riecht
Fehlende Abstraktion: Dieser Geruch entsteht, wenn Klumpen von Daten oder kodierte strings verwendet werden, anstatt eine Klasse oder eine Schnittstelle.
Imperativ Abstraktion: Dieser Geruch entsteht, wenn ein Betrieb sich in einer Klasse.
Unvollständige Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion, die nicht unterstützen, ergänzen oder miteinander verknüpften Methoden vollständig.
Vielfältigen Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion, die mehr als eine Verantwortung zugewiesen.
Unnötige Abstraktion: Dieser Geruch tritt auf, wenn eine Abstraktion, die eigentlich nicht gebraucht (und somit hätte vermieden werden können) eingeführt wird, in ein software-design.
Ungenutzten Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion bleibt ungenutzt (entweder nicht direkt oder nicht erreichbar).
Doppelte Abstraktion: Dieser Geruch entsteht, wenn zwei oder mehr Abstraktionen Namen identisch oder identisch, Umsetzung oder beides.
Kapselung riecht
Mangelhafte Kapselung: Dieser Geruch tritt auf, wenn das erklärte Erreichbarkeit von einem oder mehr Mitgliedern eine Abstraktion ist, die mehr erlauben als tatsächlich benötigt wird.
Undichte Kapselung: Dieser Geruch entsteht, wenn eine Abstraktion, die "macht" oder "Lecks" Implementierungsdetails durch seine öffentliche Schnittstelle.
Fehlende Kapselung: Dieser Geruch tritt auf, wenn für die Umsetzung Variationen sind nicht gekapselt innerhalb einer Abstraktion oder einer Hierarchie.
Ungenutzt Kapselung: Dieser Geruch entsteht, wenn der client-code verwendet, die explizite Typ-Prüfungen (mit verketteten if-else-oder switch-Anweisungen, überprüfen Sie für den Typ des Objekts) anstelle der Ausnutzung der variation in Arten bereits gekapselt innerhalb einer Hierarchie.
Modularisierung riecht
Gebrochen Modularisierung: Dieser Geruch entsteht, wenn die Daten und/oder Methoden, die im Idealfall haben sollten, lokalisiert in einer einzigen Abstraktion voneinander getrennt sind und sich auf unterschiedlichen Abstraktionen.
Unzureichende Modularisierung: Dieser Geruch entsteht, wenn eine Abstraktion vorhanden ist, der nicht vollständig zersetzt, und eine weitere Aufspaltung reduzieren könnte seine Größe, Implementierungs-Komplexität, oder beides.
Zyklisch-Abhängigen Modularisierung: Dieser Geruch entsteht, wenn zwei oder mehr Abstraktionen abhängen, sich gegenseitig direkt oder indirekt (Schaffung einer engen Kopplung zwischen den Abstraktionen).
Hub-Wie Modularisierung: Dieser Geruch entsteht, wenn eine Abstraktion, Abhängigkeiten (eingehende und ausgehende) mit einer großen Anzahl von anderen Abstraktionen.
Hierarchie riecht
Fehlende Hierarchie: Dieser Geruch entsteht, wenn ein code-segment verwendet bedingten Logik (in der Regel in Verbindung mit "tagged types") explizit verwalten variation im Verhalten, wo eine Hierarchie konnte wurden erstellt und verwendet werden, um Kapseln diese Variationen.
Unnötige Hierarchie: Dieser Geruch entsteht, wenn die gesamte Vererbungshierarchie ist unnötig, was darauf hinweist, dass die Vererbung angewendet wurde unnötig für die Besondere design-Kontext.
Unfactored Hierarchie: Dieser Geruch entsteht, wenn es unnötige Doppelarbeit zwischen Arten in einer Hierarchie.
Breite Hierarchie: Dieser Geruch entsteht, wenn eine Vererbungshierarchie ist "zu" weit darauf hinweist, dass fortgeschrittene Arten können fehlen.
Spekulative Hierarchie: Dieser Geruch entsteht dann, wenn einer oder mehrere Typen in einer Hierarchie bereitgestellt werden spekulativ (d.h., auf Basis vorstellen muss, anstatt die tatsächlichen Bedürfnisse).
Tiefe Hierarchie: Dieser Geruch entsteht, wenn eine Vererbungshierarchie ist "übertrieben" tief.
Rebellisch Hierarchie: Dieser Geruch entsteht, wenn ein Untertyp lehnt die Methoden von seinem obertyp(en).
Gebrochen Hierarchie: Dieser Geruch entsteht, wenn ein Supertyp und seine Subtyp konzeptionell nicht teilen, eine "IST - EIN" - Beziehung was gebrochen Ersetzbarkeit.
Multipath-Hierarchie: Dieser Geruch entsteht, wenn ein Subtyp erbt sowohl direkt als auch indirekt von einem obertyp was zu unnötigen Vererbung Pfade in der Hierarchie.
Zyklische Hierarchie: Dieser Geruch entsteht, wenn eine obertyp in einer Hierarchie hängt von Untertyps.
Der obigen definition und Klassifizierung beschrieben wird, in "Refactoring for software design smells: Umgang mit technischen Schulden". Einige weitere relevante Ressourcen gefunden werden konnte hier.
InformationsquelleAutor der Antwort Alex
Einem Muster ist eine Idee, wie ein problem zu lösen, von einiger Klasse. Ein anti-pattern ist eine Idee, wie man es nicht lösen, weil die Umsetzung dieser Idee wäre die Folge schlechtes design.
Ein Beispiel: ein "Muster" wäre eine Funktion verwenden, für die Wiederverwendung von code, ein "anti-pattern" wäre es, mit copy-paste für die gleiche. Beide lösen das gleiche problem, aber mit einer Funktion führt meist zu lesbareren und wartbaren code als copy-paste.
InformationsquelleAutor der Antwort sharptooth
Ein anti-pattern ist eine Möglichkeit, nicht ein problem zu lösen. Aber es ist mehr: es ist auch ein Weg, kann Häufig beobachtet werden, in den versuchen, das problem zu lösen.
InformationsquelleAutor der Antwort Ralph M. Rickenbach
Wenn Sie wirklich wollen, um zu studieren AntiPatterns, erhalten das Buch AntiPatterns (ISBN-13: 978-0471197133).
In es, Sie definieren "Ein AntiPattern ist eine literarische form, beschreibt eine Häufig vorkommende Lösung für ein problem generiert, die entschieden negative Konsequenzen."
So, wenn es ein schlechter Programmierstil, aber nicht ein gemeinsames ein—begrenzt auf eine Anwendung, eine Firma oder einen Programmierer, Sie entspricht nicht dem "Muster" ein Teil der AntiPattern-definition.
InformationsquelleAutor der Antwort kmarsh
Einen gemeinsamen Weg zu machen ein Durcheinander. Wie der Gott/kitchensink-Klasse (nicht alles), zum Beispiel.
InformationsquelleAutor der Antwort Robert Gould
Einer anti-pattern ist die Ergänzung eines design pattern. Ein anti-pattern ist eine Vorlage, die Lösung sollten Sie nicht verwenden, in einer bestimmten situation.
InformationsquelleAutor der Antwort xxmajia
Genau wie mit einem design patternein anti-pattern ist auch eine Vorlage und eine wiederholbare Art und Weise der Lösung eines bestimmten Problems, aber nicht optimal und ineffektive Weise.
InformationsquelleAutor der Antwort Darnell
Interessanterweise eine bestimmte Art ein problem zu lösen, können Sie sowohl ein Muster-und ein anti-pattern. Singleton ist das Paradebeispiel dafür. Es erscheint in beiden Arten von Literatur.
InformationsquelleAutor der Antwort Ed Sykes
Heute software-engineering-Forscher und-Praktiker verwenden Häufig die Begriffe "anti-pattern" und "Geruch" Synonym verwendet. Allerdings sind Sie konzeptionell nicht identisch sind. Der Wikipedia-Eintrag von anti-pattern besagt, dass eine anti-pattern unterscheidet sich von einer schlechten Praxis oder eine schlechte Idee ist von mindestens zwei Faktoren. Ein anti-pattern ist
Es zeigt deutlich, dass ein anti-pattern ist gewählt in der überzeugung, dass es eine gute Lösung (als Muster) zum vorgestellten problem, aber es bringt mehr Schulden als nutzen. Auf der anderen Seite, ein Geruch ist einfach eine schlechte Praxis, die sich negativ auf die Qualität des software-Systems. Zum Beispiel Singleton ist ein anti-pattern und Gott-Klasse (oder Unzureichende Modularisierung) ist ein design-Geruch.
InformationsquelleAutor der Antwort Tushar
Anti-patterns sind die häufigsten Wege, die Menschen neigen dazu, das Programm der falsche Weg, oder zumindest nicht so gut Weg.
InformationsquelleAutor der Antwort Roman A. Taycher
Jede design-Muster, das tut mehr Schaden als gut zu der vorhandenen software-Entwicklungsumgebung wäre als anti-pattern.
Einige anti-Muster sind offensichtlich, aber einige sind nicht. Zum Beispiel Singleton, obwohl viele halten es für das gute alte design-Muster, aber es gibt andere, die nicht.
Können Sie überprüfen, Frage Was ist so schlimm daran, singletons?um besser zu verstehen, die verschiedenen Meinungen auf.
InformationsquelleAutor der Antwort Himanshu Negi