シナリオ:
クラス B のメソッドで処理する必要があるイベントがクラス A で発生します。(現在はデリゲートを介して)イベントからメソッド
に渡されるデータは、現在クラス C でラップされています。
これには明らかにクラス B が必要です。クラスCに依存して
います。この依存関係を取り除くために実行できるテクニック/リファクタリングはありますか? たとえば、データを展開して単純なプリミティブ データ型に戻し、それらを直接渡します。
シナリオ:
クラス B のメソッドで処理する必要があるイベントがクラス A で発生します。(現在はデリゲートを介して)イベントからメソッド
に渡されるデータは、現在クラス C でラップされています。
これには明らかにクラス B が必要です。クラスCに依存して
います。この依存関係を取り除くために実行できるテクニック/リファクタリングはありますか? たとえば、データを展開して単純なプリミティブ データ型に戻し、それらを直接渡します。
プリミティブへの展開は機能しますが、この依存関係を本当に削除したいことを確認してください。クラス A と B の両方が C に依存することは、C がそれらの間のブリッジである場合、または C がそれらの両方をフィードする場合などに完全に有効です。
プリミティブへのアンロールは、コンパイルの依存関係を削除しますが、データの依存関係は削除しません。実際には、論理的に必要なエンティティ (クラス C) を削除することで設計を「非正規化」している可能性があります。
私はスティーブン・ロウに同意します。依存関係はおそらく有効です。私が提供できる唯一の代替手段は、実際のクラスではなくインターフェースに依存することですが、それはほとんど同じことになります。
少なくともこれらの依存関係を一元化し、構成可能にするために、Structuremapのような依存性注入フレームワークを見たことがありますか?イベント/デリゲートタイプでは試していませんが、レイヤーの周りに多くのカスタムタイプ/インターフェイスを渡す場合は優れたツールです。
他のほとんどの人が言ったように、C への依存はおそらく有効です。
ただし、C に依存して問題が発生する場合は、C が複雑すぎるか、C 自体の依存関係が多すぎることが原因である可能性があります。
クラス C がイベントで渡される場合、それはおそらく独自の依存関係のない POCO クラスである必要があるため、そのリファクタリングを検討することをお勧めします。
C が独自の複雑なメソッドを持っている場合、それらが実際にクラス A に属しているというのは良い賭けです。
XML にシリアル化し、XPATH を介して直接 XML を読み取ることができます (逆シリアル化せずに)。