Ausführliche Erklärung des Dependency Inversion Principle (DIP), den fünf Hauptprinzipien objektorientierter PHP_php-Kenntnisse

不言
Freigeben: 2023-03-23 09:36:01
Original
1372 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich das Abhängigkeitsinversionsprinzip (DIP) der fünf objektorientierten Prinzipien von PHP vorgestellt. Er beschreibt kurz das Konzept und Prinzip des Abhängigkeitsinversionsprinzips und analysiert die relevanten Definitionen und Verwendungsmethoden des PHP-Abhängigkeitsinversionsprinzips in Form von Beispielen. Was benötigt wird, können Freunde nachschlagen

Dieser Artikel erklärt das Dependency Inversion Principle (DIP), die fünf Hauptprinzipien von objektorientiertem PHP, anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Was ist Abhängigkeitsinversion? Vereinfacht ausgedrückt: kehrt die Abhängigkeitsbeziehung in eine Abhängigkeitsschnittstelle um

1. Das obere Modul sollte nicht vom unteren Modul abhängen alle hängen von einer Abstraktion ab (übergeordnete Klassen können nicht von Unterklassen abhängen, sie alle hängen von abstrakten Klassen ab)

2. Abstraktion kann nicht von Konkretheit abhängen, Konkretes sollte von Abstraktion abhängen.

Beachten Sie, dass

die Schnittstelle hier keine Schnittstelle im engeren Sinne ist.

Warum auf Schnittstellen setzen? Da die Schnittstelle die Abstraktion des Problems verkörpert und die Abstraktion im Allgemeinen relativ stabil ist oder sich relativ selten ändert, ist Beton veränderbar. Daher ist die Abhängigkeitsabstraktion die Grundlage für die Implementierung von Codeerweiterung und Laufzeitbindung (Polymorphismus): Solange eine Unterklasse der abstrakten Klasse implementiert ist, kann sie von allen Benutzern der Klasse verwendet werden. Dabei steht das Konzept der Skalierbarkeit im Vordergrund. Normalerweise bezieht sich Erweiterbarkeit auf die Erweiterung bekannter Verhaltensweisen. Wenn über Schnittstellen gesprochen wird, wird auch erwähnt, dass Schnittstellen relativ sein sollten. Dies zeigt uns, dass es unmöglich ist, eine sich ständig ändernde Situation zu erreichen, ohne den Code zu ändern, egal wie fortschrittlich das Entwurfsmuster ist. Unter den fünf Prinzipien der Objektorientierung ist die Abhängigkeitsumkehr meiner Meinung nach am schwierigsten zu verstehen und umzusetzen.

Hier nehmen wir die Mitarbeiterklasse als Beispiel

<?php
interface employee
{
  public function working();
}
class teacher implements employee
{
  public function working()
  {
    echo &#39;teaching...&#39;;
  }
}
class coder implements employee
{
  public function working()
  {
    echo &#39;coding...&#39;;
  }
}
class workA
{
  public function work()
  {
    $teacher = new teacher();
    $teacher->working();
  }
}
class workB
{
  private $e;
  public function set(employee $e)
  {
    $this->e = $e;
  }
  public function work()
  {
    $this->e->working();
  }
}
$worka = new workA;
$worka->work();
$workb = new workB;
$workb->set(new teacher());
$workb->work();
Nach dem Login kopieren

In ArbeitA hängt die Arbeitsmethode von der Lehrerimplementierung in ArbeitB ab; , Arbeitsübertragung Und verlassen Sie sich auf die Abstraktion, sodass die erforderlichen Objekte über Parameter übergeben werden können. Der obige Code erreicht über die Schnittstelle ein gewisses Maß an Entkopplung, ist jedoch immer noch begrenzt. Nicht nur durch die Verwendung von Schnittstellen, sondern auch durch die Verwendung von Fabriken kann ein gewisses Maß an Entkopplung und Abhängigkeitsumkehr erreicht werden.

In ArbeitB wird die Lehrerinstanz über die Set-Methode übergeben, wodurch das Fabrikmuster realisiert wird. Da eine solche Implementierung immer noch fest codiert ist, schreiben Sie diese Abhängigkeit in die Konfigurationsdatei, um eine weitere Erweiterung des Codes zu erreichen. Dies zeigt an, dass workB ein Lehrerobjekt benötigt, das speziell von einem Programm konfiguriert wird (z. B. ob die abhängige Klassendatei vorhanden ist). ) ) und die Implementierung, von der es in der Ladekonfiguration abhängt, wird als IOC-Container bezeichnet.

Ich habe das Konzept von IOC (Inversion of Control) in vielen Artikeln gesehen. Tatsächlich ist IOC ein Synonym für Dependence Inversion Principle (DIP). Wenn Sie IOC erwähnen, erwähnen Sie möglicherweise auch Konzepte wie DI. DI, also Abhängigkeitsinjektion Es wird allgemein angenommen, dass Abhängigkeitsinjektion (DI) und Abhängigkeitssuche (DS) zwei Implementierungen von IOC sind. Mit der Entwicklung einiger allgemeiner Konzepte ist die Beziehung zwischen diesen Konzepten jedoch verschwommen. Einige Leute denken, dass IOC DI ist. Einige Leute denken, dass die Beschreibung der Abhängigkeitsinjektion angemessener ist als die von IOC, und die Beziehung zwischen diesen Konzepten wird hier nicht verwickelt.

Im klassischen J2EE-Design werden die DAO-Schicht und die Servicen-Schicht normalerweise in die Schnittstellenschicht und die Implementierungsschicht unterteilt, und dann werden die Abhängigkeiten in der Konfigurationsdatei konfiguriert. Dies ist die häufigste DIP-Anwendung. Das Spring-Framework ist ein guter IOC-Container, der die Steuerung vom Code zum IOC-Fenster trennt. Dies wird durch XML-Konfigurationsdateien erreicht, die während der Ausführung Abhängigkeiten zwischen Objekten herstellen.

Wie im folgenden Code gezeigt

<bean scopre="prototype" class="cn.notebook.action.NotebookListOtherAction" id="notebookListOtherAction">
  <property ref="userReplyService" name="userReplyService" />
  <property ref="userService" name="userService" />
  <property ref="permissionService" name="permissionService" />
  <property ref="friendService" name="friendService" />
</bean>
Nach dem Login kopieren

Es gibt jedoch immer noch Probleme mit einer solchen Einstellung und die Konfigurationsdatei wird Immer größer wird die Beziehung immer komplexer. Wir können uns auch dem Albtraum nicht entziehen, den Code ständig zu ändern, wenn sich die Anwendung und das Geschäft ändern (hier wird die Konfigurationsdatei als Teil des Codes betrachtet). Und in der tatsächlichen Entwicklung kommt es selten vor, dass die Konfigurationsdatei einfach geändert wird. Im Allgemeinen gilt, wenn die Wenn die Konfigurationsdatei geändert wird, wird der Code entsprechend geändert.)

In PHP gibt es auch eine Implementierung, die der Nachahmung von Spring ähnelt, dh die Abhängigkeiten werden in die Konfigurationsdatei geschrieben und die erforderlichen Objekte werden in die Konfigurationsdatei geschrieben wird über die Konfigurationsdatei generiert. Ich denke, dass ein solcher Code immer noch aus Gründen der Implementierung implementiert wird. In Srping konfiguriert die Konfigurationsdatei nicht nur die Laufzeitabhängigkeiten einer Klasse, sondern auch Transaktionsverwaltung, AOP, Lazy Loading usw. Um die oben genannten Funktionen in PHP zu erreichen, ist der Verbrauch enorm. Aus sprachlicher Sicht unterscheiden sich dynamische Skriptsprachen wie PHP von kompilierten Sprachen durch die Implementierung einiger polymorpher Funktionen. Zweitens legt PHP als agile Entwicklungssprache Wert auf schnelle Entwicklung, klare Logik und einfacheren und leichter verständlichen Code. Wenn verschiedene Designmuster-Frameworks hinzugefügt werden, ist dies aus Sicht der technischen Implementierung und Betriebseffizienz nicht ratsam. Das Kernprinzip der Abhängigkeitsinversion ist die Entkopplung. Von diesem primitivsten Prinzip abzuweichen bedeutet, das Pferd von hinten aufzuzäumen.

Tatsächlich ist das Prinzip der Abhängigkeitsumkehr bereits in vielen Entwurfsmustern enthalten. Wir führen auch absichtlich oder unabsichtlich einige Arbeiten zur Abhängigkeitsumkehr durch. Es ist nur so, dass es als PHP derzeit keinen relativ vollständigen IOC-Container gibt, vielleicht braucht PHP ihn überhaupt nicht.

Wenn DIP erfüllt ist:

1. Jede Klasse höherer Ebene schlägt eine Schnittstellendeklaration für die von ihr benötigten Dienste vor, und Klassen niedrigerer Ebene implementieren diese Schnittstelle.

2. Jede High-Level-Klasse nutzt Dienste über diese abstrakte Schnittstelle.

Verwandte Empfehlungen:

Detaillierte Erläuterung des Liskov-Substitutionsprinzips (LSP) der fünf objektorientierten Prinzipien von PHP

Eins der fünf objektorientierten Prinzipien von PHP Detaillierte Erklärung des Interface Isolation Principle (ISP)

Detaillierte Erklärung des Open-Closed-Prinzips (OCP) der fünf objektorientierten Prinzipien von PHP

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des Dependency Inversion Principle (DIP), den fünf Hauptprinzipien objektorientierter PHP_php-Kenntnisse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!