同じクラスへの参照を持つ別のクラス (コンポジション) への参照を持つクラスを持つことは良い OOD プラクティスですか?
クラスA ----->クラスBとクラスB ----->クラスA ??
このような関係を持つことで、オブジェクト クラス A の状態を B から変更したり、その逆に変更したりできます。これは、オブジェクト間の通信を確立するための優れた設計パターンですか、それとも別の推奨アプローチがありますか??
同じクラスへの参照を持つ別のクラス (コンポジション) への参照を持つクラスを持つことは良い OOD プラクティスですか?
クラスA ----->クラスBとクラスB ----->クラスA ??
このような関係を持つことで、オブジェクト クラス A の状態を B から変更したり、その逆に変更したりできます。これは、オブジェクト間の通信を確立するための優れた設計パターンですか、それとも別の推奨アプローチがありますか??
このような関係は循環依存です。それ自体には、欠点しかありません。これにより、多くのガベージ コレクターが道に迷ってしまうのを防ぐことができます。オブジェクトを解放するには、A と B の両方のクライアント間のネゴシエーションが必要です。これは、A のすべてのクライアントが本質的に B のクライアントでもあり、その逆も同様であるためです。
このような相互依存関係を考慮すると、相互依存オブジェクトのコレクションを管理する別のオブジェクトを導入する必要があります。クライアントはすべてマネージャーと交渉して、いつすべてが終了し、リソースを解放できるかを決定できます。
この問題を回避するには、永続メンバーを使用する代わりに、オブジェクトへの参照をコンテキストに応じて関数引数 (または同様の一時的なローカル状態) として渡します。