Frage

Die Schnittstelle Segregations Prinzip (ISP) sagt, dass viele kundenspezifische Schnittstellen sind besser als eine Allzweck-Schnittstelle. Warum ist das wichtig?

War es hilfreich?

Lösung

ISP lautet:

  

Die Kunden sollten nicht gezwungen werden, abzuhängen   auf Methoden, die sie nicht verwenden.

ISP bezieht sich auf wichtige Merkmale - Zusammenhalt und Kopplung
. Im Idealfall werden Sie Ihre Komponenten müssen in hohem Maße zugeschnitten. Es verbessert den Code Robustheit und Wartbarkeit.

Erzwingen ISP gibt Ihnen folgende Boni:

  • Hohe Zusammenhalt - bessere Verständlichkeit, Robustheit
  • Low Kupplung - besser Wartbarkeit, hohe Beständigkeit gegen Änderungen

Wenn Sie mehr über Software-Design-Prinzipien lernen möchten, erhalten eine Kopie von Agile Softwareentwicklung, Grundsätze, Muster und Praktiken Buch.

Andere Tipps

Die Schnittstelle Segregation ist die „I“ auf dem festen Grundsatz, bevor zu tief mit dem ersten Graben, lassen Sie uns erklären, was das letztere bedeutet das.

SOLID kann durch Experten eine Reihe von Best Practices und Empfehlungen berücksichtigt werden (das heißt, sie vor erwiesenermaßen), um eine zuverlässige Grundlage in geben, wie wir Anwendungen entwerfen. Diese Praktiken bemühen sich leichter zu pflegen, zu erweitern, anzupassen und unsere Anwendungen skalieren.

Warum soll ich mich mit SOLID Programmierung?

Zunächst einmal müssen Sie feststellen, Sie gehen zu sein, nicht für immer, wo Sie sind. Wenn wir Standards und gut bekannte Architekturen verwenden, können wir sicher sein, dass unser Code einfach sein wird, von anderen Entwicklern zu erhalten, die nach uns kommen, und ich bin sicher, Sie würden nicht mit der Aufgabe beschäftigen mögen einen Code Festsetzung, die didn ‚t angewandt jede bekannte Methode, da es sehr schwierig wäre, sie zu verstehen.

Das Interface Segregation Prinzip.

Wissen, dass wir wissen, was die SOLID Prinzipien sind, können wir mehr ins Detail über die Schnittstelle Segregations Prinzip, aber was genau macht die Schnittstelle Segregation sagt?

  

„Kunden sollten keine unnötigen Methoden gezwungen werden, zu implementieren, die   sie verwenden“

nicht

Das bedeutet, dass manchmal neigen wir dazu, Schnittstellen mit vielen Methoden zu machen, die in einem solchen Ausmaß kann gut sein, aber dies leicht missbraucht können, und wir können mit Klassen am Ende, die leer oder nutzlosen Methoden implementieren, die natürlich zusätzlich ergänzt Code und Belastung für unsere Anwendungen. Stellen Sie sich eine Menge von Methoden in einzelnen Schnittstelle deklarieren, wenn Sie Sehhilfen eine Klasse wie die eine Schnittstelle implementiert, aber das ist wirklich ein paar Methoden der es brauchen würde wie folgt aussehen:

eingeben Bild Beschreibung hier

In der anderen Seite, wenn Sie richtig die Schnittstelle Segregation anwenden und teilen Sie Ihre Schnittstelle in kleineren Teilmengen können Sie mir sicher, dass diejenigen implementieren, die nur benötigt werden:

eingeben Bild Beschreibung hier

Sehen Sie! Ist viel besser! Dieses Prinzip Erzwingen ermöglicht es Ihnen, eine geringe Kopplung zu haben, die zu einer besseren Wartbarkeit und hohe Beständigkeit gegen Änderungen unterstützt. So kann man wirklich die Nutzung von Schnittstellen nutzen und Umsetzung der Methoden, wenn Sie wirklich sollten. Lassen Sie uns nun einen weniger abstraktes Beispiel überprüfen, sagen Sie eine Schnittstelle deklariert genannt Reportable

public interface Reportable {

        void printPDF();
        void printWord();
        void printExcel();
        void printPPT();
        void printHTML();


}

Und Sie haben einen Client, nur werden einige Daten in Excel-Format zu exportieren, können Sie die Schnittstelle implementieren, aber würden Sie nur die Excel-Methode implementieren müssen? Die Antwort ist nein, werden Sie die Implementierung für alle Methoden codieren müssen, auch wenn Sie verwenden wollen sie nicht, dies daher eine Menge von Junk-Code kann dazu führen, den Code schwer zu machen .. halten

Denken Sie daran, es einfach zu halten und wiederholen sich nicht, und Sie werden feststellen, dass Sie dieses Prinzip bereits verwenden, ohne zu wissen.

Es vereinfacht die Schnittstelle, die ein Client verwenden und entfernt Abhängigkeiten, die sie sonst auf Teile der Schnittstelle entwickeln könnten, die sie nicht brauchen.

Ein Grund dafür ist, dass für jeden viele Schnittstellen mit einer minimalen Menge von Methoden, die macht es einfacher, jede Schnittstelle zu implementieren und sie richtig zu implementieren. Eine große Schnittstelle kann widerspenstig sein. Auch in einem Szenario eine fokussierte Schnittstelle macht den Code maintanable, weil Sie die Facette des Objekts sehen verwendet wird (zum Beispiel eine IComparable-Schnittstelle läßt Sie wissen, dass das Objekt nur für Vergleiche im gegebenen Szenario verwendet wird).

Dieses Prinzip dient in erster Linie Doppel Zwecken

  • Um den Code besser lesbar und handhabbar zu machen.

  • Fördert einzelne Verantwortung für die Klassen (hohe Kohäsion). Ofcourse warum soll eine Klasse eine Methode, die keine Verhalten Auswirkungen hat? Warum nicht einfach entfernen. Das ist, was ISP ist über

Es gibt nur wenige Fragen, die ein Designer mit Bedenken ISP fragen müssen

  • Was leistet ein mit ISP
  • Wie analysiere ich einen bereits vorhandenen Code für alle ISP Verletzungen

diese Diskussion nehmen weiter, ich muß auch hinzufügen, dass dieses Prinzip nicht ein ‚Prinzip‘ im engeren Sinne, da unter Umständen ISP auf das Design der Anwendung statt Lesbarkeit zu fördern, könnte die Objektstruktur unlesbar machen und überladen mit unnötigen Code. Sie können gut beobachten dies im java.awt.event Paket

Mehr auf meinem Blog: http: // Design -principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html

ISP ist wichtig.

Grundidee von ISP: Client sollte es nicht verwendet nicht gezwungen werden, auf Methoden abhängen

.

Dieses Prinzip scheint logisch zu sein. Im Idealfall implementieren Client sollte nicht die Methoden, die nicht durch den Client verwendet werden.

Siehe

auf unter SE Frage Codebeispiel:

Schnittstelle Segregationsprinzipien Programm mit einer Schnittstelle

Vorteile:

  1. Flexibilität : In Abwesenheit von ISP, Sie haben eine generische FAT-Schnittstelle und viele Klassen es umzusetzen. Angenommen, Sie 1-Schnittstelle und 50 Klassen hatten. Wenn es eine Änderung der Schnittstelle ist, müssen alle 50 Klassen ihre Umsetzung ändern.

    Mit ISP finden Sie generische FAT-Schnittstelle in feingranularen kleine Schnittstellen unterteilen. Wenn es eine Änderung in der kleinkörniger Schnittstelle ist, werden nur die Klassen, die Schnittstelle implementiert werden betroffen sein.

  2. Wartbarkeit und Benutzerfreundlichkeit : Da Änderungen an feinkörniger Oberfläche begrenzt werden anstelle von allgemeiner FACT-Schnittstelle, Code Wartung ist einfacher. Nicht verwandter Code ist nicht mehr Teil der Implementierungsklassen.

Um Regressionsarbeit zu vermeiden, wenn nur eine kundenspezifische oder ein Verhalten spezifische Änderungen. Wenn Sie alle Ihre Verhalten Methoden kombiniert haben alle in einem großen Schnittstelle, man denke nur darüber, wie Sie alle Teile des Codes testen wird am Ende, wo alles, was Sie genannt haben, die eine Schnittstelle zu, auch wenn nur kleine Änderungen geschehen ist.

Für eine ausführlichere Erklärung finden href="http://rangahc.blogspot.com/2015/10/Interface-segregation-solid-design-principle.html" auf Schnittstelle Segregation Prinzip Artikel

Robert Martin Papier zu diesem Thema finden Sie eine Erklärung, die weniger erwähnt wird oft :

  

Die nach hinten aufgebrachten Kraft von Kunden auf Schnittstellen.

Wenn zwei Klassen hängen direkt von zwei verschiedenen Methoden einer dritten Klasse, erhöht sich die Wahrscheinlichkeit, dass entweder der ersten beiden Klassen ändert sich die anderen auswirken.

Angenommen, wir haben drei Klassen:. Red, Green und Blue

Red und beide Green abhängen Blue, aber jeder ist abhängig von einer anderen Methode. Das bedeutet, dass Red auf ein Verfahren zum Blue hängt aber nicht die andere Methode verwenden. Ebenso hängt Green auf Blue, aber nur verwendet ein Verfahren, das andere nicht.

Die Verletzung des Prinzips ist in Red und Green, weil jeder auf einer Klasse abhängt - Blue - aber nicht Gebrauch mindestens eine seiner Methoden

.

Welches Problem hat diese potenziell erstellen?

  • Ich brauche Red zu ändern, und ich auch Blue ändern, um die Bedürfnisse von Red aufzunehmen.
  • Ich habe nicht die spezifische Methode innerhalb Blue geändert, dass Green abhängt, aber dennoch Green hängt von Blue und ich habe Blue geändert, die noch Green auswirken könnte.
  • Daher meine Änderungen Red haben das Potenzial, Blue auswirken, weil sie mich dazu gebracht haben, eine Klasse zu ändern, die beide abhängig ist.

Das ist die „rückwärts Kraft.“ Wir manchmal eine Klasse ändern, weil die Bedürfnisse seiner Kunden. Wenn diese Klasse unterschiedliche Kunden hat, die es für verschiedene Dinge verwenden, laufen wir Gefahr, sie zu beeinflussen.

Wie bereits erwähnt, ist die einfache Definition der Schnittstelle Segregations Prinzip ist:

  

soll kein Kunde gezwungen werden, auf Methoden angewiesen es nicht verwenden.

Zwischen diesem und dem obigen Punkt von Robert Martin Papier, es ist offensichtlich, dass viele Erklärungen des ISP sind in der Tat über andere Prinzipien zu sprechen.

  • Klassen oder Schnittstellen mit vielen Methoden sind unerwünscht, aber nicht speziell wegen des ISP. Sie könnten einzige Verantwortung verletzen. Aber die ISP Verletzung ist nicht in der großen Schnittstelle oder große Klasse - es ist in den Klassen, die hängen von auf der großen Oberfläche, wenn sie nicht alle ihre Methoden verwenden. Wenn sie alle Methoden verwenden es immer noch chaotisch klingt, aber das hat nichts mit dem ISP zu tun.
  • Klassen, die eine Schnittstelle implementieren, aber Ausnahmen für bestimmte Methoden werfen sind schlecht, aber das ist nicht der ISP, auch nicht. Der ISP ist über Klassen, die abhängen auf Schnittstellen, nicht Klassen, die implementieren Schnittstellen.

Wenn wir Google „Interface Segregation“, die meisten der Top-Ergebnisse, die Codebeispiele demonstrieren Klassen enthalten, die nicht vollständig implementieren Schnittstellen, die nicht der Punkt des ISP ist. Einige haben sogar neu formulieren das Prinzip:

  

Die Schnittstelle Segregations Prinzip besagt, dass Kunden nicht Schnittstellen zu implementieren gezwungen werden sollten, die sie nicht verwenden

... aber das ist nicht das Prinzip. Das bestimmende Papier erwähnt solche Bedenken als Nebeneffekt des ISP zu verletzen, zeigt aber, dass sie Liskov Substitution Verletzungen sind.

  

Darüber hinaus ist jedes Mal, wenn eine neue Schnittstelle zu der Basisklasse hinzugefügt wird, muss diese Schnittstelle sein   umgesetzt (oder erlaubt Standard) in abgeleiteten Klassen. Tatsächlich ist ein assoziiertes Praxis diese Schnittstellen auf die Basisklasse als Null virtuelle Funktionen eher als reine virtuelle Funktionen hinzuzufügen; insbesondere so, dass abgeleiteteKlassen sind nicht mit der Notwendigkeit belastet, diese umzusetzen. Wie wir in der zweiten Artikel dieser Spalte gelernt, eine solche Praxis verletzt die Liskov Substitutionsprinzip (LSP), was zu Wartung und Wiederverwertbarkeit Probleme.

Was mehr ist, zu sagen, dass ein Client nicht Methoden implementieren sollte es nicht verwendet nicht einmal Sinn machen. Die Kunden eine Schnittstelle nicht implementieren ihre Methoden.

ich meine nicht pompös, das Papier zu zitieren, als ob es heilige Schrift oder etwas ist. Aber wenn wir gehen den Namen des Prinzips in dem Artikel beschrieben verwenden (der Name des Artikels selbst), dann sollten wir auch die tatsächliche Definition betrachten und Erklärung in diesem Artikel enthalten sind.

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