Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie Friend-Abhängigkeiten entfernen, ohne die Funktionalität zu beeinträchtigen?

Können Sie Friend-Abhängigkeiten entfernen, ohne die Funktionalität zu beeinträchtigen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 13:35:39640Durchsuche

Can You Remove Friend Dependencies Without Sacrificing Functionality?

Überdenken der Friend-Abhängigkeit für die gleichzeitige Zugriffsverwaltung

Einführung

In diesem Artikel stellen wir Befassen Sie sich mit der Herausforderung, vor der Sie stehen, wenn Sie versuchen, eine „Freund“-Abhängigkeit zwischen zwei Klassen zu beseitigen, die für die Verwaltung des synchronisierten Lese-/Schreibzugriffs auf eine gemeinsam genutzte Ressource verantwortlich sind. Die Friend-Abhängigkeit wurde eingeführt, um ClassAAccessor Zugriff auf die geschützten Methoden von ClassA zu gewähren und sicherzustellen, dass Clients nur über ClassAAccessor und sein Lebenszyklusverhalten mit ClassA interagieren.

Verstehen der Friend-Abhängigkeit

Das ursprüngliche Design basierte auf einer Friend-Abhängigkeit zwischen ClassA und ClassAAccessor. Diese Abhängigkeit ermöglichte ClassAAccessor den Zugriff auf die geschützten Methoden von ClassA und ermöglichte so die Verwaltung des Sperrens und Entsperrens gemeinsam genutzter Ressourcen. Von der Verwendung von Friend-Abhängigkeiten wird jedoch aus verschiedenen Gründen abgeraten, unter anderem weil sie zu Wartungsproblemen führen können.

Refactoring-Prozess

Um die Friend-Abhängigkeit zu entfernen, folgen wir einem dreistufigen Verfahren: Schrittprozess:

  1. Einführung einer abstrakten Schnittstelle: Wir erstellen eine abstrakte Schnittstelle, InternalInterface, um die Operationen darzustellen, die zuvor über die Friend-Deklaration zugänglich waren. ClassA wird zu einer Implementierung von InternalInterface gemacht, aber die Generalisierung wird geschützt, um die Kapselung aufrechtzuerhalten.
  2. Operationen in die Schnittstelle verschieben: Die Operationen, die die „Aufruf“-Abhängigkeit erstellt haben (zuvor dargestellt durch Freund) werden von ClassA nach InternalInterface verschoben. Dadurch wird eine klare und explizite Beziehung zwischen der Schnittstelle und der Implementierung hergestellt.
  3. Glueing-Implementierung: In der Implementierung bieten wir ClassAAccessor eine Möglichkeit, einen Verweis auf die InternalInterface zu erhalten, wodurch dies möglich ist Zugriff auf die erforderlichen Vorgänge. Dies wird durch eine Methode in ClassA erreicht, die es ClassAAccessor ermöglicht, seine internalInterfaceRef-Variable festzulegen.

Vor- und Nachteile

Dieser Ansatz hat Vorteile wie:

  • Entfernung der problematischen Friend-Abhängigkeit
  • Verbesserte Wartbarkeit und reduzierte Kopplung

Es sind jedoch auch einige Nachteile zu berücksichtigen:

  • Erhöhte Codekomplexität aufgrund der Einführung einer abstrakten Schnittstelle
  • Potenzial einer Leistungseinbuße im Vergleich zur Verwendung von Friend-Deklarationen (obwohl dies durch sorgfältige Implementierung gemildert werden kann)

Fazit

Durch Befolgen der beschriebenen Schritte haben wir das Design erfolgreich umgestaltet, um die Friend-Abhängigkeit zu entfernen und gleichzeitig die gewünschte Funktionalität beizubehalten. Dieser Refactor bietet mehrere Vorteile, einschließlich einer verbesserten Wartbarkeit, und verdeutlicht gleichzeitig die potenziellen Kompromisse, die mit solchen Änderungen verbunden sind.

Das obige ist der detaillierte Inhalt vonKönnen Sie Friend-Abhängigkeiten entfernen, ohne die Funktionalität zu beeinträchtigen?. 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