Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man eine „Freund“-Abhängigkeitserklärung umgestalten: Eine Schritt-für-Schritt-Anleitung zum Entfernen übermäßiger gegenseitiger Abhängigkeiten?

Wie kann man eine „Freund“-Abhängigkeitserklärung umgestalten: Eine Schritt-für-Schritt-Anleitung zum Entfernen übermäßiger gegenseitiger Abhängigkeiten?

DDD
DDDOriginal
2024-11-05 10:02:02372Durchsuche

How to Refactor a

Wie man eine „Freund“-Abhängigkeitsdeklaration umgestaltet

Hintergrund

Man kann auf ein Szenario stoßen, in dem eine „Freund“-Abhängigkeit zwischen zwei Klassen entfernt wird erwünscht, insbesondere aufgrund von Bedenken hinsichtlich übermäßiger gegenseitiger Abhängigkeit, Wartungsproblemen und veralteter UML-Standards.

Schritt 1: Einführen einer abstrakten Schnittstelle

Extrahieren Sie die von der „Friend“-Klasse bereitgestellten Methoden und erstellen Sie eine neue abstrakte Schnittstelle. Stellen Sie eine Abhängigkeitsbeziehung von der „Friend“-Klasse zur Schnittstelle und eine „Call“-Abhängigkeit von der anderen Klasse zur Schnittstelle her.

Schritt 2: Operationen in die Schnittstelle verschieben

Verschieben Sie die Operationen die die „Aufruf“-Abhängigkeit von der abhängigen Klasse zur abstrakten Schnittstelle bilden. Lassen Sie die Schnittstelle einen geschützten Konstruktor für Vererbungszwecke erweitern und verbergen Sie die geschützte Generalisierungszuordnung zwischen der abhängigen Klasse und der Schnittstelle.

Schritt 3: Implementierung zusammenfügen

Erstellen Sie im letzten Schritt eine Methode in der Klasse „Freund“, um eine Referenz der abstrakten Schnittstelle an die abhängige Klasse zu übergeben. Rufen Sie diese Methode während der Initialisierung aus der abhängigen Klasse auf, um die erforderliche Verbindung herzustellen.

Implementierung

KlasseA (Anbieter):

<code class="cpp">class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};</code>

ClassAAccessor (Freund):

<code class="cpp">class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};</code>

Vorteile

  • Entfernt unnötige Abhängigkeiten zwischen Klassen
  • Entspricht modernen UML-Standards
  • Erzwingt die Zugriffskontrolle, indem interne Vorgänge vor der Öffentlichkeit verborgen werden

Einschränkungen

  • Kann die Codekomplexität erhöhen
  • Erfordert abstrakte Schnittstellen, was sich auf Leistung und Speicherbedarf auswirkt
  • Die UML-Darstellung einer geschützten Generalisierungsbeziehung kann eine Herausforderung sein

Das obige ist der detaillierte Inhalt vonWie kann man eine „Freund“-Abhängigkeitserklärung umgestalten: Eine Schritt-für-Schritt-Anleitung zum Entfernen übermäßiger gegenseitiger Abhängigkeiten?. 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