17

私は .dll ファイルを実際に使用したことがないプログラマーです。もちろん、グラフィックス ライブラリ、グラフの作成に役立つライブラリなどのサードパーティ ソフトウェアが必要な場合は、参照/ddl ファイルをプログラムに追加して、コードで使用します。

また、.dllは色々と使えそうなので、話題はC#に絞っていただきたいです。

現在、私はサニタイズ ライブラリ(?) (正しい用語だと思います) に取り組んでおり、さまざまな方法で変数をサニタイズできる関連メソッドでいっぱいになります。

私が知りたいのは:

次の利点がありますか?

1)メソッドをクラスライブラリに書き込みます->コンパイル/ビルド->ライブラリをプログラムへの参照として追加します-いくつかの変数をサニタイズする必要がありますか?

または、次の場所に移動した場合、まったく同じになります。

2)プログラムで新しい SanitizeClass を作成します -> すべてのサニタイズ メソッドを追加します -> 変数をサニタイズする必要があるプログラム内のさまざまなクラスで SanitizeClass からメソッドを呼び出します

一般に、コンパイルされたクラス ライブラリを使用する利点がある場合についても知りたいと思います。速度、セキュリティ、すべてを考えています。

誰かが私を啓発できますか?:)

4

7 に答える 7

28

重要な質問は、複数のアプリケーションがその型を使用することは理にかなっているのかということです。もしそうなら、それはクラスライブラリにあるはずです。そうでない場合でも、分離のためだけにクラスライブラリに配置することをお勧めします(たとえば、n層ソリューションの層ごとに1つのアセンブリを用意する)が、アプリケーションに配置することもできます。

サニタイズが汎用である場合、それをクラスライブラリに配置することは間違いなく正しい動きです。

実行可能アプリケーションでほとんどコードを記述せず、ほとんどすべてをクラスライブラリに配置する人を知っています。したがって、アプリケーションは基本的にクラスライブラリをラップするだけです。私はそれほど遠くまで行く傾向はありません...

于 2009-04-02T14:55:45.960 に答える
2

最初に頭に浮かぶのは、使いやすさです。このサニタイズライブラリは、現在作業しているアプリケーションの外部で使用されますか?もしそうなら、将来的にexeを参照する必要はありません。そのため、DLLファイルを作成し(おそらくそれを厳密に名前を付けてGACにすることもできます)、それを将来参照するだけです。

于 2009-04-02T14:55:23.370 に答える
2

ライブラリの使用は、複数のプログラム間でコードを共有する場合に役立ちます。

複数のプログラムでデータをサニタイズするためにクラスが必要になると思われる場合は、それらをライブラリに配置することをお勧めします。

アプリケーションのレイヤーを異なるライブラリに配置することもお勧めします(n層アーキテクチャを確認してください)

于 2009-04-02T14:56:49.030 に答える
2

アセンブリを追加すると、ロード時間とメモリオーバーヘッドがわずかに追加されますが、それ以外の場合はパフォーマンスに影響はありません。

セキュリティは、異なるコードアクセスセキュリティ(CAS)が必要な場合にのみ違いを生み、CASを利用します。

一般的に3つの理由があります:

  1. それは物事を簡単にします。すべてを1つのアセンブリにまとめるのは扱いにくくなっています(これには組織/チームの問題が含まれる可能性があります)。

  2. 再利用。

  3. 個別のアセンブリが必要です。たとえば、AppDomainをアンロードできるようにするために、さまざまなアセンブリにインターフェイスと実装を配置します(プラグインなど)。

于 2009-04-02T14:57:24.880 に答える
0

最も簡単な方法は、SanitizeLibraryプロジェクトをライブラリクラスプロジェクトとしてソリューションに追加し、アプリケーションでこのプロジェクトを参照することだと思います。便利な場合は、現在のプロジェクトからライブラリを抽出し、他のプロジェクトでdllとして参照できます。

于 2009-04-02T14:58:47.730 に答える
0

このコードを別のアプリで再利用する場合(つまり、これはある種の共有ライブラリになります)、dllとしてコンパイルします

regのパフォーマンス、外部アセンブルに対して実行されるコードは、同じアセンブリ内でコードを実行するよりも常に少し遅くなることに注意してください

于 2009-04-02T14:59:43.813 に答える