Frage

Ich bin das Studium Muster und anti-Muster. Ich habe eine klare Vorstellung über Muster, aber ich weiß nicht anti-Muster erhalten. Definitionen aus dem Internet und Wikipedia verwirren mich sehr.

Kann jemand mir in einfachen Worten erklären, was ein Anti-Muster? Was ist der Zweck? Was machen Sie? Ist es eine schlechte Sache oder eine gute Sache?

War es hilfreich?

Lösung

Anti-Muster bestimmte Muster in der Software-Entwicklung sind, die schlechten Programmierpraktiken berücksichtigt werden.

Im Gegensatz href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" rel="noreferrer"> Entwurfsmuster der gemeinsamen Ansätze für gemeinsame Probleme sind, die gewesen sind formalisiert und sind in der Regel eine gute Entwicklung der Praxis, anti-Muster sind das Gegenteil und sind unerwünscht.

betrachtet

Zum Beispiel in der objektorientierten Programmierung ist die Idee, die Software in kleine Stücke genannt Objekte zu trennen. Ein anti-Muster in der objektorientierten Programmierung ist ein Gott Objekt , die eine Vielzahl von Funktionen ausführen, die würde besser in verschiedene Objekte getrennt werden.

Zum Beispiel:

class GodObject {
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

Das obige Beispiel hat ein Objekt, das tut alles . In der objektorientierten Programmierung, wäre es besser, gut definierte Verantwortlichkeit für verschiedene Objekte zu haben, um den Code zu halten weniger gekoppelter und letztlich mehr wartbar:

class FileInputOutput {
    function ReadFromFile() {}
    function WriteToFile() {}
}

class UserInputOutput {
    function DisplayToScreen() {}
    function ValidateInput() {}
}

class Logic {
    function PerformInitialization() {}
    function PerformCalculation() {}
}

Unter dem Strich gibt es gute Möglichkeiten, Software mit gängigen Mustern ( Entwurfsmuster zu entwickeln ), aber es gibt auch Möglichkeiten, Software entwickelt und implementiert, die zu Problemen führen können. Muster, die schlechten Software-Entwicklung Praktiken in Betracht gezogen werden, sind anti-Muster.

Andere Tipps

Jedes Mal, wenn ich über Anti-Muster hören, erinnere ich mich an einem anderen Begriff nämlich. Design Geruch.

"Design Gerüche sind bestimmte Strukturen in der Gestaltung, die Verletzung der grundlegenden Gestaltungsprinzipien zeigen und sich negativ auf Designqualität auswirken.“ (From "Refactoring für Software Design Smells: Verwaltung von technischen Schulden")

Es gibt viele Designs Kleine Gerüche basierend auf Design-Prinzipien zu verletzen:

Abstraction riecht

Fehlende Abstraktion:. Dieser Geruch entsteht, wenn Klumpen von Daten oder kodierten Strings statt der Schaffung einer Klasse oder eine Schnittstelle verwendet werden

Imperative Abstraktion:. Dieser Geruch entsteht, wenn ein Betrieb in eine Klasse eingeschaltet wird

Unvollständige Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion nicht komplementär oder miteinander verbundenen Methoden vollständig unterstützt

.

Vielschichtiges Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion mehr als eine Verantwortung zugewiesen ist

.

Unnötige Abstraktion:. Dieser Geruch tritt auf, wenn eine Abstraktion, die eigentlich nicht benötigt wird (und damit hätte vermieden werden können) in einem Software-Design eingeführt wird

Die ungenutzte Abstraktion: Dieser Geruch entsteht, wenn eine Abstraktion nicht verwendet wird (entweder nicht direkt verwendet oder nicht erreichbar ist)

.

Duplizieren Abstraktion:. Dieser Geruch entsteht, wenn zwei oder mehr Abstraktionen identische Namen oder identische Implementierung oder beide

Encapsulation riecht

defiziente Encapsulation:. Dieser Geruch tritt auf, wenn die deklarierte Zugänglichkeit von einem oder mehreren Mitgliedern einer Abstraktion zügiger ist als tatsächlich erforderlich

Leaky Encapsulation:. Dieser Geruch entsteht, wenn eine Abstraktion „entlarvt“ oder „Lecks“ Implementierungsdetails durch die öffentliche Schnittstelle

Fehlende Encapsulation: Dieser Geruch tritt auf, wenn die Umsetzung Variationen innerhalb einer Abstraktion oder Hierarchie nicht eingekapselt

.

Ungenutzte Encapsulation: Dieser Geruch entsteht, wenn Client-Code explizite Typprüfungen verwendet (unter Verwendung if-else oder switch-Anweisungen verkettet, die für die Art des Objekts überprüfen) statt der Variation Typen bereits verkapselte Ausnutzen innerhalb einer Hierarchie.

Modularisierung riecht

Gebrochene Modularisierung:. Dieser Geruch entsteht, wenn Daten und / oder Methoden, die im Idealfall zu einer einzigen Abstraktion lokalisiert werden sollen getrennt und über mehrere Abstraktionen verteilt

Unzureichende Modularisierung:. Dieser Geruch entsteht, wenn eine Abstraktion, die vorhanden ist vollständig zerlegt nicht, und eine weitere Zersetzung könnte seine Größe, die Komplexität der Implementierung oder beides reduzieren

Zyklisch-Dependent Modularisierung. Dieser Geruch entsteht, wenn zwei oder mehr Abstraktionen voneinander abhängig sind direkt oder indirekt (eine enge Kopplung zwischen den Abstraktionen Schaffung)

Hub-Like Modularisierung:. Dieser Geruch entsteht, wenn ein Abstraktion Abhängigkeiten (eingehende und ausgehende) mit einer großen Anzahl anderer Abstraktionen hat

Hierarchie riecht

Fehlende Hierarchie: Dieser Geruch entsteht, wenn ein Codesegment bedingte Logik verwendet (in der Regel in Verbindung mit „getaggt Typen“) explizit Variation im Verhalten zu verwalten, wo eine Hierarchie erstellt und verwendet wurde, könnte zu kapseln diese Variationen.

Unnötige Hierarchie:. Dieser Geruch entsteht, wenn die gesamte Vererbungshierarchie nicht erforderlich ist, dass Vererbung angibt unnötig für den speziellen Designkontext angewandt wurde

ohne Teilsicherheitsbeiwerte Hierarchie: entsteht Dieser Geruch, wenn es unter den Typen in einer Hierarchie unnötige Duplizierung ist

.

Breite Hierarchie: Dieser Geruch entsteht, wenn eine Vererbungshierarchie „zu“ breit ist, was anzeigt, dass Zwischentypen fehlen möglicherweise

.

Spekulative Hierarchie: Diese smell entsteht, wenn eine oder mehr Arten in einer Hierarchie spekulativ vorgesehen sind (das heißt, basierend auf Anforderungen gedacht statt realen Anforderungen).

Deep Hierarchie: Dieser Geruch entsteht, wenn eine Vererbungshierarchie „übermäßig“ tief ist

.

Rebellious Hierarchie: Dieser Geruch entsteht, wenn ein Subtyp das Verfahren durch seinen übergeordneten Typen (n) zur Verfügung gestellt lehnt

.

Gebrochene Hierarchie:. Dieser Geruch entsteht, wenn ein übergeordneter Typ und seine Subtyp konzeptionell keine „IS- A“ Beziehung in gebrochenem Ersetzbarkeit resultierenden teilen

Multipath Hierarchie:. Dieser Geruch entsteht, wenn ein Subtyp erbt sowohl direkt als auch indirekt von einem Supertyp, um unnötige Vererbungsweg in der Hierarchie führt

Zyklische Hierarchie:. Dieser Geruch entsteht, wenn ein übergeordneten Typ in einer Hierarchie auf jedem seiner Subtypen hängt


Die obige Definition und Klassifizierung in "Refactoring für Software-Design beschrieben Gerüche: Technische Schulden verwalten “. Einige relevante Ressourcen gefunden werden konnte hier .

Ein Muster ist eine Vorstellung davon, wie ein Problem einer Klasse zu lösen. Ein anti-Muster ist eine Vorstellung davon, wie es nicht zu lösen, weil die Idee der Umsetzung in schlechtem Design führen würde.

Ein Beispiel: ein „Muster“ wäre, eine Funktion für die Wiederverwendung von Code zu verwenden, ein „Anti-Muster“ wäre copy-paste für denselben zu verwenden. Beide lösen das gleiche Problem, aber eine Funktion in der Regel unter Verwendung führt zu mehr lesbar und wartbar Code als Copy-Paste.

Ein anti-Muster ist ein Weg, kein Problem zu lösen. Aber es gibt mehr zu ihm. Es ist auch eine Möglichkeit, die häufig in Versuchen zu sehen ist, das Problem zu lösen

Wenn Sie wirklich wollen, Antipatterns studieren, erhalten das Buch Antipatterns (ISBN-13: 978-0471197133).

Darin sie definieren „Ein Antipattern ist eine literarische Form, die eine häufig vorkommende Lösung für ein Problem beschreibt, die ausgesprochen negative Folgen erzeugt.“

Also, wenn es eine schlechte Programmierpraxis aber nicht gemeinsam eine Anwendung eine begrenzte, ein Unternehmen oder ein Programmierer, ist es nicht das „Muster“ ein Teil der Antipattern Definition entsprechen.

Ein üblicher Weg, ein Chaos zu machen. Wie die Gott / KitchenSink Klasse (tut alles), zum Beispiel.

Ein anti-Muster ist das Komplement einer Design-Muster . Ein Anti-Muster ist eine Vorlage Lösung, die Sie nicht in einer bestimmten Situation verwendet werden sollen.

Wie bei einem Design-Muster , ein anti-Muster ist auch eine Schablone und eine wiederholbare Weise ein bestimmtes Problem zu lösen, aber in einem nicht optimalen und unwirksam Art und Weise.

Interessanter eine bestimmte Art und Weise ein Problem zu lösen sowohl ein Muster sein kann und ein Anti-Muster. Singleton ist das beste Beispiel dafür. Es wird in beiden Sätzen von Literatur erscheinen.

Heute, Software-Engineering-Forscher und Praktiker nutzen häufig die Begriffe „anti-Muster“ und „Geruch“ austauschbar. Allerdings sind sie vom Konzept her nicht das gleiche. Der Wikipedia-Eintrag von anti-Muster besagt, dass ein Anti-Muster von einer schlechten Praxis oder einer schlechten Idee von mindestens zwei Faktoren unterscheiden. Ein anti-Muster

  

"Ein häufig verwendetes Verfahren, Struktur oder Handlungsmuster, dass trotz   zunächst erscheinen, eine angemessene und wirksame Reaktion auf eine sein   Problem, hat in der Regel mehr schlimme Folgen als positive Ergebnisse.“

Es zeigt deutlich, dass ein Anti-Muster in dem Glauben gewählt wird, dass es eine gute Lösung (als Muster) zu dem vorgestellten Problem ist; jedoch mehr Verbindlichkeiten als Vorteile mit sich bringt. Auf der anderen Seite, ein Geruch ist einfach eine schlechte Praxis, die sich negativ auf die Qualität eines Softwaresystems auswirkt. Zum Beispiel ist Singleton ein Anti-Muster und Gott-Klasse (oder nicht genügend Modularisierung) ist ein Design-Geruch.

Anti-Muster sind gemeinsame Wege neigen Menschen dazu, den falschen Weg zu programmieren, oder zumindest die nicht so gute Weg.

Jedes Entwurfsmuster, die mehr Schaden machen als gut für die Umwelt Software-Entwicklung gegeben würde als anti-Muster betrachtet werden.

Einige anti-Muster sind offensichtlich, aber einige sind es nicht. Zum Beispiel Singleton, obwohl viele halten es für gutes altes Design-Muster, aber es gibt andere, die dies nicht tun.

Sie können überprüfen Frage Was Singletons so schlecht ist? besser versteht die unterschiedlichen Meinungen auf sie.

Wie in Algorithmus können Sie die Lösung erzielen Kraft Brute, aber Sie haben viel zu zahlen, wenn Situation komplexer geworden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top