.NET(Visual Studio)では、いつ新しいアセンブリを作成しますか?


9

Silverlightアプリケーションに取り組んでいます。私はそれをいくつかのアセンブリに分割しました:

  • ドメイン
  • リポジトリー(Sterlingデータベースに存続するものすべて)
  • UI
  • ...

これは私が学んだ方法ですが、疑問に思いました。DLLが再利用されないことがわかっている場合、それらを分割する必要がありますか?または、すべてを1つのアセンブリに配置し、フォルダと名前空間を使用して整頓できますか?

アセンブリが多すぎるプロジェクトも見ました。適切な場所で名前空間を使用する代わりに。

それで、いつ新しいコードの一部に対して新しいアセンブリを作成するのですか?このテーマに関する良いリソースはありますか?また、コードを技術的に(ドメイン、データ、UIなど)に分割したり、機能的に(つまり、患者管理、患者医療、病院ロジスティクスなど)分割したりしますか?

回答:


1

論理的に「モジュール」に分類されるクラスには、個別のアセンブリを作成することをお勧めします。これは再利用と保守に役立つだけでなく、クラス間の依存関係を最小限に抑える方法にもなります。

ミッションは、各アセンブリが必要とする他のアセンブリへの参照の数を最小限に抑えることです。これは、主にインターフェイスとイベントを介して行われます。異なるアセンブリにクラスがあると、依存関係が非常に明白になります。それとは対照的に、1つのアセンブリだけを使用する場合は、すべてにアクセスできるため、依存関係について考えることを無視するのは非常に簡単です。

もちろん、誇張ではなく、必要に応じて分離してください。このように考えてください:「これらのクラスは一緒に属し、これらのクラスについて知っている必要はありません」そしてそれらの線に沿って分離します


1
「モジュール」の意味に依存しますが、私は通常、アセンブリではなく名前空間を使用して関連するロジックを分割します。名前空間はアセンブリにまたがることができます。アセンブリは展開の単位であるため、展開シナリオに合わせてアセンブリをカットすることを検討する必要があります。
エドジェームス

3
良い考えではありません。ソリューションに複数のプロジェクトが含まれる場合、VSは非常に遅くなります。
nikie、2011

4
VSが遅くなりすぎる場合は、古いバージョンを実行しているか、遅いコンピューターを使用しています。数秒でコンパイルできる30以上のプロジェクトを含む巨大なプロジェクトがあります。そして、私はたくさんのRAM、コア、SSDを持っています:)もちろん、誇張すべきではありませんが、適切な場合にのみ分離し、このように考えてください。それらの線に沿って分離
Homde

依存関係についてのコメントのため、これを回答としてマークしました。エドジェームズの答えは少なくとも価値があり、正しいですが、この答えは私の状況により適しています。
ピーター

2
このアプローチに続いて、あなたは、アセンブリの束で終わることができます:ABCDEFGHIJK。あなたはアセンブリ参照どこA、あなたはまた、その依存アセンブリを参照する必要があります:BCD。しかし、アセンブリC:に依存しているEFGH私たちはあまりにもそれらを必要とするつもりです。したがって、何らかの機能が必要なA場合は、7つの追加のアセンブリをプルダウンして機能させる必要があります。各アセンブリの正しいバージョンを取得していることを確認してください。新しいDLL Hellへようこそ。
Ed James

14

アセンブリは、.NETアプリケーションの配置の単位です。したがって、アセンブリのカットを展開アーキテクチャと一致させることを検討する必要があります。

アセンブリは、一部のコードで個別のバージョン管理が必要な場合にも役立ちます。たとえば、独立したバージョン管理の恩恵を受ける共通のインターフェイスがある場合、そのコードをアセンブリに分離する必要があります。

名前空間はアセンブリにまたがることができることに注意してください。多くの場合、名前空間を使用して動作を分離することで十分です。.NET mscorlib.dllを見てください。単一のアセンブリには、名前空間のみで分離されたさまざまな動作をカバーするコードが含まれています。

この件について何らかの権限が必要な場合は、次の点に注意してください。

フレームワーク設計ガイドライン

フレームワーク設計ガイドライン: Krzysztof CwalinaおよびBrad Abramsによる再利用可能な.NETライブラリ(第2版)の規則、イディオム、およびパターン


確かに本の参照をありがとう。確認します。配備アーキテクチャについて詳しく教えてください。10個のDLLファイルの配備は1個の配備とどのように異なりますか?10個のファイルの1つを更新できる場合を除き、他のファイルは変更されないままですか?
ピーター

1
@Peter:常に一緒に展開される10個のアセンブリをコーディングした場合、すべてのコードを単一のアセンブリに配置することで、バージョン管理と展開を簡略化できます。10個のアセンブリが常に一緒に展開されるとは限らない場合は、個別のアセンブリがあると便利です。
エドジェームズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.