首頁 >後端開發 >C++ >如何重構程式碼中的好友依賴關係?

如何重構程式碼中的好友依賴關係?

Linda Hamilton
Linda Hamilton原創
2024-11-04 15:31:02770瀏覽

How to Refactor a Friend Dependency in Your Code?

友元依賴關係刪除重建

在軟體開發領域,友元聲明可能會引入緊密耦合和維護問題。本指南提供了正確重構友元依賴項的詳細路線圖,將您的程式碼庫轉變為更可維護和更有彈性的結構。

揭示重構的需求

考慮以下內容場景:ClassA 和 ClassAAccessor 共享友元依賴關係,將 ClassAAccessor 存取權限授予 ClassA 的受保護成員。雖然這看起來很方便,但它帶來了幾個缺點:

  • UML 2.2 已棄用好友構造型。
  • 大多數編碼指南不鼓勵好友使用,因為它會產生過多的依賴性。
  • 它可能會導致維護噩夢。

逐步重建

第1 步:引入抽象介面

將友元聲明替換為一個抽象介面

將友元聲明替換為一個名為InternalInterface的類別接口,將友元關係分割為直接依賴關係和對InternalInterface的呼叫依賴關係。

第2步:將操作移至介面

辨識構成呼叫依賴的操作,並將它們從ClassA 移至InternalInterface,使用受保護的建構函數擴展InternalInterface,並將ClassA 與InternalInterface 的泛化關聯標記為受保護。

步驟3:連接組件

ClassAAccessor 需要對InternalInterface 的引用。在 ClassA 中實作一個附加方法 AttachAccessor(),並使用它透過 setInternalInterfaceRef() 將 InternalInterface 的參考傳遞給 ClassAAccessor。當呼叫 ClassA::attachAccessor() 時,將會呼叫此方法。

<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>
C 實作

可選增強:引入InternalClientInterface

為了進一步引入解耦實現,可以考慮引入解耦實現,可以考慮引入解耦實現,可以考慮引入解耦實現,可以考慮引入解耦實現,可以考慮另一個InternalClientInterface作為ClassA和ClassAAccessor之間的中介。

結論

透過執行以下步驟,您可以有效重構友元依賴關係,增強程式碼穩定性、可維護性並遵守編碼最佳實踐。請記住,在您自己的程式碼庫中實作此方法之前,請仔細評估與此方法相關的潛在缺點。

以上是如何重構程式碼中的好友依賴關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn