ホームページ  >  記事  >  バックエンド開発  >  「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?

「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?

DDD
DDDオリジナル
2024-11-05 10:02:02372ブラウズ

How to Refactor a

「フレンド」依存関係宣言をリファクタリングする方法

背景

2 つのクラス間の「フレンド」依存関係を削除するシナリオに遭遇する可能性があります。特に過剰な相互依存性、メンテナンスの問題、古い UML 標準に関する懸念により、これが望まれます。

ステップ 1: 抽象インターフェイスの導入

「フレンド」クラスによって公開されるメソッドを抽出し、新しい抽象インターフェイス。 「フレンド」クラスからインターフェイスへの依存関係を確立し、他のクラスからインターフェイスへの「呼び出し」依存関係を確立します。

ステップ 2: インターフェイスへの操作の移動

操作を移動します。依存クラスから抽象インターフェイスへの「呼び出し」依存関係を構成します。インターフェイスが継承目的で保護されたコンストラクターを拡張し、依存クラスとインターフェイスの間の保護された汎化関連付けを非表示にします。

ステップ 3: 実装を結合する

最後のステップでは、メソッドを作成します。 「friend」クラスで、抽象インターフェイスの参照を依存クラスに渡します。初期化中に依存クラスからこのメソッドを呼び出し、必要な接続を確立します。

実装

ClassA (プロバイダー):

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

ClassAAccessor (友人):

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

利点

  • クラス間の不要な依存関係を削除
  • 最新の UML 標準に準拠
  • 内部操作を公開しないようにすることでアクセス制御を強制します

制限事項

  • コードが複雑になる可能性があります
  • 抽象インターフェイスが必要で、パフォーマンスとメモリ フットプリントに影響します
  • 保護された汎化関係の UML 表現は困難な場合があります

以上が「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。