私は、ソフトウェアの同じ部分が 1 つの実行可能ファイルといくつかの DLL に分割されている小さな製品を数多く見てきました。これらの DLL は、他の誰かによって作成された単なる共有ライブラリではなく、このソフトウェア専用に作成されたライブラリです。同じ開発チーム。(ここでは、何百もの DLL を必要とし、それらを他の製品と広く共有するだけの大規模な製品について話しているのではありません。)
コードをいくつかの部分に分割し、それぞれを個別の DLL にコンパイルすることは、開発者の観点からは良いことだと理解しています。だということだ:
- 開発者が 1 つのプロジェクトを変更した場合、このプロジェクトと依存するプロジェクトのみを再コンパイルする必要があり、これによりはるかに高速になる可能性があります。
- プロジェクトはチーム内の 1 人の開発者が行うことができますが、他の開発者はコードに介入することなく、提供されたインターフェイスを使用するだけです。
- ソフトウェアの自動更新は、サーバーへの影響が少なく、高速になる場合があります。
しかし、エンドユーザーはどうでしょうか? すべてをグループ化できるのに、1 つの EXE と複数の DLL で構成されるソフトウェアを提供するのは、単に悪いことではないでしょうか? 結局:
- ユーザーは、それらのファイルが何なのか、そしてなぜそれらが自分のハードディスクのメモリをいっぱいにするのかさえ理解していないかもしれません。
- ユーザーは、USB フラッシュ ドライブにプログラムを保存するなど、プログラムを移動したい場合があります。1 つの大きな実行可能ファイルがあると作業が簡単になります。
- ほとんどのウイルス対策ソフトウェアは、各 DLL をチェックします。1 つの実行可能ファイルをチェックする方が、小さな実行可能ファイルと多数のライブラリをチェックするよりもはるかに高速です。
- DLL を使用すると、いくつかの処理が遅くなります (たとえば、.NET Framework では、「適切な」ライブラリを見つけて、署名されているかどうかを確認する必要があります)。
- DLL が削除されたり、不適切なバージョンに置き換えられたりするとどうなりますか? すべてのプログラムはこれを処理しますか? それとも、何が問題なのかを説明することさえせずにクラッシュしますか?
- 1 つの大きな実行可能ファイルを持つことには、他にもいくつかの利点があります。
小規模/中規模のプログラムの場合、エンド ユーザーの観点からは、1 つの大きな実行可能ファイルを提供する方がよいのではないでしょうか? もしそうなら、それを簡単に実行できるツールがないのはなぜですか (たとえば、ソリューション全体を 1 つの実行可能ファイルにコンパイルする一般的な IDE に統合された魔法のツールは、もちろん毎回ではなく、オンデマンドまたは展開中に)。
これは、すべての CSS ファイルまたはすべての JavaScript ファイルをユーザー向けの 1 つの大きなファイルに入れることにいくらか似ています。複数のファイルを持つことは、開発者にとってはるかにスマートで保守が容易ですが、Web サイトの各ページを数十ではなく 2 つのファイルにリンクすると、パフォーマンスが最適化されます。同じように、CSS スプライトはデザイナーにとっては厄介なものです。なぜなら、CSS スプライトはより多くの作業を必要とするからです。しかし、ユーザーの観点からはより優れています。