1

私は大きくて太くて醜いレガシープログラムを持っています。私が達成しなければならなかった1つのタスクは、プロジェクトAに新しいクラスを追加することでした。プロジェクトBはプロジェクトAを参照していますが、追加する必要のある機能は、プロジェクトBのクラスのメソッドによって異なります。もちろん、循環参照が作成されるため、AからプロジェクトBを参照することはできません。同様の状況で、私のアプローチは、プロジェクトCを作成し、依存関係をABからプロジェクトCに移動し、 ABの両方にそれを参照させることでした。

ただし、この特定のタスクでは、非常に多くのコードを移動する必要があるため、ソリューションに大きな混乱が生じます。

今のところ、必要なクラスのインスタンスをボックスに入れて渡し、objectリフレクションを使用して実行時に必要なメソッドにアクセスしています。

コードをプロジェクトCに移動せずにこれを解決する他の(より良い)方法はありますか?

4

2 に答える 2

3

プロジェクトAで定義されたインターフェイスを作成します。このインターフェイスには、Aが呼び出せるようにするプロジェクトBのメソッドのメソッドシグネチャが含まれています。プロジェクトBのクラスにそのインターフェースを実装します。

残っているのは、BがAに「私はここにいます!電話してください!」と伝える方法を提供することだけです。これを行うには、インターフェイスをパラメータとして受け取り、プロジェクトAの変数に保持する静的メソッドをAで定義します。Bはそのメソッドを呼び出して、インターフェイスを実装するクラスのインスタンスを渡すことができます。AがBを呼び出す必要がある場合、Aはその登録関数によって保存されたインターフェース参照を呼び出します。

于 2010-09-21T23:29:03.530 に答える
0

循環参照がある場合は、おそらくソリューションで1つのプロジェクトが2つのプロジェクトに分割されている可能性があります。次に、彼のコードを1つのプロジェクトにマージし、この2番目のプロジェクトを削除して、新しいプロジェクトを導入しません。

于 2010-09-21T23:21:54.310 に答える