Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der fünf objektorientierten Prinzipien von PHP und des Prinzips der Schnittstellenisolation

Ausführliche Erläuterung der fünf objektorientierten Prinzipien von PHP und des Prinzips der Schnittstellenisolation

零到壹度
零到壹度Original
2018-04-10 11:52:311306Durchsuche

Die Beispiele in diesem Artikel beschreiben das Interface Isolation Principle (ISP) der fünf objektorientierten Prinzipien von PHP. Geben Sie es wie folgt als Referenz an alle weiter: <br>

Wenn ein Modul beim Entwerfen einer Anwendung mehrere Untermodule enthält, sollten wir darauf achten, das Modul zu abstrahieren. Unter der Annahme, dass das Modul von einer Klasse implementiert wird, können wir das System in eine Schnittstelle abstrahieren. Wenn jedoch beim Hinzufügen einer neuen Modulerweiterung das hinzuzufügende Modul nur einige Untermodule des ursprünglichen Systems enthält, werden wir vom System gezwungen, alle Methoden in der Schnittstelle zu implementieren, und wir müssen einige dumme Methoden schreiben. Solche Schnittstellen werden als fette Schnittstellen oder verschmutzte Schnittstellen bezeichnet. Die Verwendung solcher Schnittstellen führt zu unangemessenen Verhaltensweisen im System. Diese unangemessenen Verhaltensweisen können zu falschen Ergebnissen führen und auch zu einer Verschwendung von Ressourcen führen.

1. Schnittstellentrennung

Das Schnittstellentrennungsprinzip (ISP) besagt, dass Clients nicht gezwungen werden sollten, Schnittstellen zu implementieren, die sie nicht verwenden, und dass sie Methoden in fetten Schnittstellen gruppieren und diese dann durch ersetzen sollten mehrere Schnittstellen, die jeweils ein Submodul bedienen. Einfach ausgedrückt ist es viel besser, mehrere spezialisierte Schnittstellen zu verwenden als eine einzelne Schnittstelle.

Die Hauptpunkte von ISP sind wie folgt:

1) Die Abhängigkeit einer Klasse von einer anderen Klasse sollte auf der kleinsten Schnittstelle basieren.

ISP kann das Ziel erreichen, Kunden (Schnittstellennutzungsmethoden) nicht dazu zu zwingen, sich auf Methoden zu verlassen, die sie nicht verwenden. Die Implementierungsklasse der Schnittstelle sollte nur eine Einzelverantwortungsrolle darstellen (nach dem SRP-Prinzip)

ISP auch Es kann die gegenseitige Beeinflussung zwischen Kunden verringern – wenn ein Kunde neue Verantwortlichkeiten benötigt (Änderungen erfordert) und eine Änderung der Schnittstelle erzwingt, ist die Möglichkeit einer Beeinträchtigung anderer Kundenprogramme minimal.

2) Client-Programme sollten sich nicht auf Schnittstellenmethoden (Funktionen) verlassen, die sie nicht benötigen.

Das Client-Programm sollte von Schnittstellenmethoden (Funktionen) abhängig sein, die es nicht benötigt. Hängt von der benötigten Schnittstelle ab. Stellen Sie die Schnittstelle bereit, die der Kunde benötigt, und eliminieren Sie unnötige Schnittstellen. Dies erfordert eine Verfeinerung der Schnittstelle, um ihre Reinheit sicherzustellen.

Beim Erben erbt die Unterklasse beispielsweise alle verfügbaren Methoden in der übergeordneten Klasse und einige Methoden in der übergeordneten Klasse werden in der Unterklasse möglicherweise nicht benötigt. Beispielsweise erben sowohl normale Mitarbeiter als auch Manager von der Mitarbeiterschnittstelle. Mitarbeiter müssen jeden Tag Arbeitsprotokolle schreiben, Manager jedoch nicht. Daher können Arbeitsprotokolle nicht zum Blockieren von Managern verwendet werden, d. h. Manager sollten sich nicht auf die Methode zur Übermittlung von Arbeitsprotokollen verlassen.

Es ist ersichtlich, dass ISP und SRP gewisse konzeptionelle Überschneidungen aufweisen. Tatsächlich überschneiden sich viele Entwurfsmuster konzeptionell, und es ist sogar schwierig zu erkennen, zu welchem ​​Entwurfsmuster ein Codeabschnitt gehört.

ISP betont, dass die Schnittstelle dem Kunden so wenig wie möglich verspricht und spezifisch sein muss. Wenn sich die Anforderungen eines bestimmten Client-Programms ändern und eine Änderung der Schnittstelle erzwingen, ist die Wahrscheinlichkeit einer Beeinträchtigung anderer Client-Programme gering. Dabei handelt es sich tatsächlich um ein Problem der Schnittstellenverschmutzung.

2. Verschmutzung der Schnittstelle

Ein übermäßig aufgeblähtes Schnittstellendesign ist eine Verschmutzung der Schnittstelle. Die sogenannte Schnittstellenverschmutzung besteht darin, der Schnittstelle unnötige Verantwortlichkeiten hinzuzufügen. Wenn der Entwickler der Schnittstelle nur eine neue Funktion hinzufügt, um die Anzahl der Schnittstellenimplementierungsklassen zu reduzieren, führt dieses Design dazu, dass die Schnittstelle kontinuierlich „verschmutzt“ und „fett“ wird " .

„Schnittstellenisolation“ ist eigentlich das Prinzip des maßgeschneiderten Servicedesigns. Verwenden Sie die Mehrfachvererbung von Schnittstellen, um verschiedene Schnittstellen zu kombinieren und externe Kombinationsfunktionen bereitzustellen – um „Dienste nach Bedarf“ zu erreichen.

Die Schnittstelle muss zerlegt werden, aber sie kann nicht zu fein zerlegt werden. Es muss ein Standard vorhanden sein, der eine hohe Kohäsion aufweist. Die Schnittstelle sollte über einige Grundfunktionen verfügen und in der Lage sein, eine Grundaufgabe eindeutig zu erledigen.

In praktischen Anwendungen werden Sie auf die folgenden Probleme stoßen: Wenn ich beispielsweise eine DAO-Implementierung benötige, die sich an mehrere Datenbanktypen anpassen kann, sollte ich zunächst eine Datenbankoperationsschnittstelle implementieren, die einige grundlegende Methoden für Datenbankoperationen festlegt B. „Mit der Datenbank verbinden“, „Hinzufügen“, „Löschen“, „Ändern“ und „Abfragen“, „Schließen der Datenbank“ usw. Dies ist eine minimal funktionale Schnittstelle. Für einige Methoden, die nur für MySQL gelten, aber in anderen Datenbanken nicht vorhanden sind oder anderer Natur sind, wie z. B. die pconnect-Methode von MySQL, die möglicherweise in PHP verwendet wird, haben andere Datenbanken nicht das gleiche Konzept wie diese Methode, daher ist dies bei dieser Methode nicht der Fall Es sollte in dieser Basisschnittstelle erscheinen. Welche grundlegenden Methoden sollte diese Basisschnittstelle haben? PDO hat es Ihnen gesagt.

PDO ist eine abstrakte Datenbankschnittstellenschicht, die uns sagt, welche grundlegenden Methoden eine grundlegende Datenbankbetriebsschnittstelle implementieren sollte. Die Schnittstelle ist eine Abstraktion auf hoher Ebene, daher sollten die Methoden in der Schnittstelle universell, einfach und nicht leicht zu ändern sein.

Es gibt noch eine andere Frage: Wie sollten diese einzigartigen Methoden implementiert werden? Gemäß dem ISP-Prinzip können diese Methoden in einer anderen Schnittstelle vorhanden sein, wodurch diese „heterogen“ beide Schnittstellen gleichzeitig implementieren können.

Bei Schnittstellenverschmutzung können Sie diese beiden Verarbeitungsmethoden in Betracht ziehen:

Verwenden Sie die Delegation, um Schnittstellen zu trennen.

Verwenden Sie Mehrfachvererbung, um Schnittstellen zu trennen.

Im Delegationsmodus sind zwei Objekte an der Verarbeitung derselben Anfrage beteiligt. Das Objekt, das die Anfrage akzeptiert, delegiert die Anfrage zur Verarbeitung an ein anderes Objekt. Das Konzept der Delegation wird im Strategiemodus, im Proxy-Modus usw. angewendet.

Werfen wir einen Blick auf die Beispiele

Sind Sie jemals auf eine sehr „fette“ Benutzeroberfläche gestoßen?

Zum Beispiel: Es gibt eine Schnittstelle zu Tieren. Der Code lautet wie folgt:

<br>
  1. <?php
    interface Animal{
      public function walk();
      public function speak();
    }

Hund gehört zu dieser Schnittstelle A spezifische Umsetzung:

<br>
  1. <?php
    require_once "animal.php";
    class Dog implements Animal{
      public function walk(){
        echo "dogs can walk";
      }
      public function speak(){
        echo "dogs can speak";
      }
    }

ok, jetzt wollen wir einen Fisch erschaffen, der schwimmen kann, was sollen wir tun? Wir müssen die Schnittstelle ändern, was sich auch auf die Implementierung der Hundeklasse auswirkt, und Fisch muss auch die Walk- und Speak-Methoden implementieren, wie im folgenden Code gezeigt:

Animal-Schnittstellenklasse:

<br>
  1. <?php
    interface Animal{
      public function walk();
      public function speak();
      public function swim();
    }

Hundekategorie:

<br>
  1. <?php
    require_once "animal.php";
    class Dog implements Animal{
      public function walk(){
        echo "dogs can walk";
      }
      public function speak(){
        echo "dogs can speak";
      }
      public function swim(){
      }
    }

Fischkategorie:

<br>
  1. <?php
    require_once "animal.php";
    class Fish implements Animal{
      public function walk(){
      }
      public function speak(){
      }
      public function swim(){
        echo "fish can swim";
      }
    }

Zu diesem Zeitpunkt zeigt die Animal-Schnittstellenklasse die Eigenschaften einer „fetten“ Schnittstelle. Die sogenannte Fat-Schnittstelle bedeutet eigentlich, dass die Schnittstelle Methoden definiert, die nicht von allen Implementierungsklassen benötigt werden. Genau wie die Animal-Schnittstellenklasse können einige Tiere nicht schwimmen, einige Tiere können nicht laufen und einige Tiere können nicht fliegen. Wenn diese Methoden in einer Animal-Schnittstellenklasse geschrieben sind, wird die spätere Erweiterung und Wartung eine Katastrophe sein.

Wie können also die oben genannten Probleme gelöst werden?

Es ist ganz einfach: Verfeinern Sie einfach die Schnittstelle und teilen Sie die Animal-Schnittstellenklasse in drei Schnittstellenklassen auf:

animalCanWalk接口类:

<br>
  1. <?php
    interface animalCanSpeak{
      public function speak();
    }

AnimalCanSwim接口类:

<br>
  1. <?php
    interface AnimalCanSwim{
      public function swim();
    }

animalCanSpeak接口类:

<br>
  1. <?php
    interface animalCanSpeak{
      public function speak();
    }

定义好这几个接口类之后,dog和fish的实现就容易多了,

<br>
  1. <?php
    require_once "animalCanSpeak.php";
    require_once "animalCanWalk.php";
    class Dog implements animalCanSpeak,animalCanWalk{
      public function walk(){
        echo "dogs can walk";
      }
      public function speak(){
        echo "dogs can speak";
      }
    }

<br>

接口隔离原则(Interface Segregation Principle, ISP)的概念:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der fünf objektorientierten Prinzipien von PHP und des Prinzips der Schnittstellenisolation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn