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:
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>
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!