私の .net ソリューションには 3 つのプロジェクトがあります。
メイン プロジェクトと 2 つのクラス ライブラリ プロジェクト。
クラス ライブラリ プロジェクトを相互参照する必要があることがわかりました。
それをしてもいいですか?それは安全ですか、それともいくつかの考慮事項がありますか?
私の .net ソリューションには 3 つのプロジェクトがあります。
メイン プロジェクトと 2 つのクラス ライブラリ プロジェクト。
クラス ライブラリ プロジェクトを相互参照する必要があることがわかりました。
それをしてもいいですか?それは安全ですか、それともいくつかの考慮事項がありますか?
プロジェクトが 1 つのソリューションにある場合、IDE では許可されません。それを混乱させる微妙な方法があります。ただし、アセンブリ参照がまだ利用できないため、ソリューションをゼロからビルドすることはできません (つまり、ビルド + リビルド)。これをリファクタリングします。おそらく、両方が参照できる 3 番目のアセンブリが必要です。
循環参照は可能ですが(IDE 経由ではなく、コマンドラインといくつかのトリックを使用)、大きな問題です。それをしないでください!
一般的な型のアセンブリを追加するか、2 つのライブラリをマージします。
多くの点で、少ない方が簡単です...無数のdllは、純粋さを達成したことを意味するものではありません-それはただの混乱です。
この問題に遭遇したとき、プロパティのみを持つクラスを作成しました。Employee
、Customer
、Product
、何でもかまいません。これらのクラスは他のプロジェクトを参照する必要がないため、複数のプロジェクトでそれらを参照できます。
Employee
これらのオブジェクト ( 、Customer
、 )に属するメソッドProduct
は、他のプロジェクトの独自のクラスに入ります。
私がよく遭遇する状況の 1 つは、プレゼンテーション層、ビジネス層、およびデータ アクセス層の 3 層アプリケーションです。DAL でデータを取得し、BLL に返される Employee オブジェクトを作成する必要があります。Employee クラスが BLL にあり、プロパティとメソッドの両方を持っている場合、DAL に Employee オブジェクトを設定してそれを BLL に返す簡単な方法はありません。BLL には DAL への参照が必要なので、 DAL は BLL を参照できません。プロパティのみのクラス ( Employee
、Customer
、Product
) を使用して別のプロジェクトを作成することは、この問題を解決する 1 つの方法です。
「相互参照」とは、次のことを行うことを意味します。
1) プロジェクトMAINには、 LIBRARY-ALPHAおよびLIBRARY-BETAへの参照が含まれています。
2) プロジェクトLIBRARY-ALPHAにはLIBRARY-BETAへの参照が含まれています
3) プロジェクトLIBRARY-BETAにはLIBRARY-ALPHAへの参照が含まれています
いいえ。ALPHAとBETAをビルドするまで、 Visual Studio はMAINをビルドできません。BETAをビルドするまでALPHAをビルドすることはできません。また、 ALPHAをビルドするまでBETAをビルドすることはできません。したがって、何も構築できなくなります。