次のクラス図は、私が取り組んでいるプロジェクトの簡略化されたバージョンです。依存関係をリダイレクトするためのデザインパターン
クラスAは、私はクラスCをデシリアライズときに、フレームワークは、すべての新しいインスタンスを作成し、私は直列化のためのCSHARPのフレームワークを使用していますC.をルートオブジェクトのグラフをデシリアライズ/シリアライズする責任がありますCを起源とするオブジェクト(*新しいクラスによって図に示されています)。今、私はCのインスタンスをCnewに置き換えたいのですが、問題はB1とB2がまだ古いD1とD2を指しているということです。 B2とB2の依存関係を再初期化する必要はありません。
私は、B1とB2がAからD1とD2にアクセスできるようにする方法を探していますが、Cや互いにアクセスすることはできません。簡単にするために、私たちは、Aのメンバのすべてがpublicでなければならないと仮定することができます(これは、私が使用しているフレームワークから多くのメンバを公開するインタフェースを実装しています)。ここで
は、いくつかの潜在的な解決策Iのかかわらず、次のとおりです。
だけ弾丸をかむとB1とB2に代わりD1およびD2のへの参照を与え、単に無視B1とB2
を再初期化これにより、アクセスが不要な多くのクラスにアクセスできるようになります。
Bクラスに直接アクセスする代わりに、Dクラスに直接アクセスすると、AのインスタンスD1およびD2を返す関数の代理人(関数ポインタ)にAパスが渡されます。
HaveインスタンスはD1またはD2にインスタンスを返す1つの必須メソッドを持つD1ContainerおよびD2Containerのようなインターフェイスを実装します。その後、AをD1ContainerまたはD2Containerにキャストし、B1とB2に渡します。
このような種類のデザインパターンがありますか、私の解決策の1つは明らかに最高ですか?
ありがとうございます!
Dependency InjectionまたはInversion of Controlのコンテナをチェックしましたか? –