27

これらの 2 つのプロジェクトがある場合:

MyCompany.ERP.Billing
MyCompany.ERP.Financial

BillingはFinancialに情報を要求/送信し、その逆も同様です。どちらも大きすぎるので、1 つのプロジェクトに入れたくありません。Visual Studio では、循環参照は許可されていません。どのように対処しますか?

4

4 に答える 4

25

クラスからインターフェイスを抽出し、BillingFinancialプロジェクトの両方から参照されるコア プロジェクトに配置します。その後、これらのインターフェイスを使用して、アセンブリ間でデータを共有できます。

これにより、これら 2 つのアセンブリ間でオブジェクトを渡すことしかできなくなりますが、最初から参照を実際に持っていないため、他のアセンブリからオブジェクトを作成することはできません。オブジェクトを作成できるようにするには、オブジェクトの作成を処理する、これら 2 つのプロジェクトの外部にあるファクトリが必要です。

別のプロジェクト間Billingでデータをやり取りする必要があるビジネス ロジックを抽出します。Financialこれにより、物事がはるかに簡単になり、保守性を悪夢にするあらゆる種類のトリックに頼る必要がなくなります。

于 2010-09-15T16:30:54.387 に答える
5

プロジェクトが大きすぎることは問題になりません。名前空間とソース コード用のさまざまなフォルダーを使用して、コードの構造を維持できます。この場合、循環参照はもはや問題ではありません。

于 2010-09-15T16:35:12.790 に答える
3

インターフェイスについて言及している答えは正しいですが、両方のプロジェクトから両方のタイプを作成できるようにする必要がある場合は、ファクトリをさらに別のプロジェクトにファームアウトする必要があります (インターフェイス プロジェクトも参照しますが、両方から参照される可能性があります)。主なプロジェクトの) または使用している構造を大幅に変更します。

このようなものが動作するはずです:

Finance: References Billing, Interfaces, Factory
Billing: References Finance, Interfaces, Factory
Factory: References Interfaces

Factory には、BillingFactory.CreateInstance() As Interfaces.IBillingInterfaces.IBilling を実装する抽象 Billing クラスも含まれます。

私が見ることができる唯一の問題は、オブジェクトをインスタンス化するときに何か賢いことをする必要があり、そのロジックを別のプロジェクトで終わらせたくない場合ですが、インスタンス化するための巧妙なロジックについて言及していないので、これで十分なはずです

于 2010-09-15T17:20:05.013 に答える