私は大規模なプロジェクトを抱えており、修正方法がわからない循環参照に陥りました。前方宣言について読んだことがありますが、よく理解していれば、前方宣言を使用すると、そのオブジェクトのパブリックメソッド/データはパブリックになりません。
これを修正する最善の方法は、コードの最初の行からプログラムを設計することですが、この種の問題を抱える大きなコードを継承し、コードに単純な機能を追加して混乱させることがあることを理解しています。 。
それで...この問題を解決する他の方法はありますか?
私は大規模なプロジェクトを抱えており、修正方法がわからない循環参照に陥りました。前方宣言について読んだことがありますが、よく理解していれば、前方宣言を使用すると、そのオブジェクトのパブリックメソッド/データはパブリックになりません。
これを修正する最善の方法は、コードの最初の行からプログラムを設計することですが、この種の問題を抱える大きなコードを継承し、コードに単純な機能を追加して混乱させることがあることを理解しています。 。
それで...この問題を解決する他の方法はありますか?
クラスAがクラスBを使用しているが、そのメソッドがない場合、クラスAはクラスBを前方宣言できます。クラスBがクラスAを使用している場合、少なくともコンパイラーに関する限り、前方宣言は循環依存の半分を削除します。
Aが名前だけでなくBについてのより深い知識を必要とする場合は、インターフェイス(抽象クラス)を使用して依存関係をAからBIに反転できます。Aは(Bではなく)新しいCを使用して、少なくともAが必要とするインターフェイスをエクスポートします。 BはCを実装/拡張します。
私はこれが主にコンパイル時間を短縮するために使用されるのを見てきました-これはあなたが尋ねる理由ですか、それとも「良い」デザインと関係がありますか?