Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können Sie eine Friend-Abhängigkeit in Ihrem Code umgestalten?

Linda Hamilton
Freigeben: 2024-11-04 15:31:02
Original
677 Leute haben es durchsucht

How to Refactor a Friend Dependency in Your Code?

Refactoring zur Entfernung von Friend-Abhängigkeiten

Im Bereich der Softwareentwicklung können Friend-Deklarationen zu engen Kopplungs- und Wartungsproblemen führen. Dieser Leitfaden bietet eine detaillierte Roadmap für die ordnungsgemäße Umgestaltung einer Friend-Abhängigkeit und die Umwandlung Ihrer Codebasis in eine wartbarere und belastbarere Struktur.

Enthüllung der Notwendigkeit einer Umgestaltung

Bedenken Sie Folgendes Szenario: ClassA und ClassAAccessor teilen sich eine Friend-Abhängigkeit und gewähren ClassAAccessor Zugriff auf geschützte Mitglieder von ClassA. Dies mag zwar praktisch erscheinen, birgt jedoch mehrere Nachteile:

  • UML 2.2 hat das Freunde-Stereotyp abgelehnt.
  • Die meisten Codierungsrichtlinien raten von der Verwendung von Freunden ab, da dadurch eine übermäßige Abhängigkeit entsteht.
  • Es kann zu Wartungsalpträumen führen.

Refactoring Schritt für Schritt

Schritt 1: Einführung einer abstrakten Schnittstelle

Ersetzen Sie die Friend-Deklaration durch eine Klassenschnittstelle namens InternalInterface und teilen Sie die Friend-Beziehung in eine direkte Abhängigkeit und eine Aufrufabhängigkeit von InternalInterface auf.

Schritt 2: Verschieben Sie Vorgänge in die Schnittstelle

Identifizieren Sie die Operationen, die die Aufrufabhängigkeit bilden, und verschieben Sie sie von ClassA nach InternalInterface, erweitern Sie InternalInterface mit einem geschützten Konstruktor und markieren Sie die Generalisierungszuordnung von ClassA zu InternalInterface als geschützt.

Schritt 3: Komponenten verbinden

ClassAAccessor benötigt einen Verweis auf InternalInterface. Implementieren Sie eine zusätzliche Methode, attachmentAccessor(), in ClassA und verwenden Sie sie, um über setInternalInterfaceRef() einen Verweis auf InternalInterface an ClassAAccessor zu übergeben. Diese Methode wird aufgerufen, wenn ClassA::attachAccessor() aufgerufen wird.

C-Implementierung

<code class="cpp">// ClassAAccessor definition
class ClassAAccessor {
public:
    ClassAAccessor(ClassA& classA);
    void setInternalInterfaceRef(InternalInterface &newValue);
private:  
    InternalInterface* internalInterfaceRef;
};

// Method to set the reference to InternalInterface
ClassA::attachAccessor(ClassAAccessor &accessor) {
    accessor.setInternalInterfaceRef(*this);
}</code>
Nach dem Login kopieren

Optionale Erweiterung: Einführung eines InternalClientInterface

Um die Implementierung weiter zu entkoppeln, sollten Sie die Einführung eines weiteren InternalClientInterface als Vermittler zwischen ClassA und ClassAAccessor in Betracht ziehen.

Fazit

Wenn Sie diese Schritte befolgen, können Sie dies tun Refaktorieren Sie eine Friend-Abhängigkeit effektiv und verbessern Sie so die Stabilität des Codes, die Wartbarkeit und die Einhaltung von Best Practices für die Codierung. Denken Sie daran, die mit diesem Ansatz verbundenen potenziellen Nachteile sorgfältig abzuwägen, bevor Sie ihn in Ihrer eigenen Codebasis implementieren.

Das obige ist der detaillierte Inhalt vonWie können Sie eine Friend-Abhängigkeit in Ihrem Code umgestalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
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!