8

同じコレクションにある記事のタイトルや他の記事などのメタ情報についてMSDN記事を解析するアプリの作成に取り組んでいます。このアプリにはGUIフロントエンドもあります。

フロントエンドをバックエンドとバックエンドから2つの部分に分離することでこのプログラムをよりモジュール化することに興味があります。1つはHTMLドキュメントの取得と一般的な解析を処理し、もう1つはより具体的なものです。 MSDN自体に関連する解析。これにより、カスタムUIをバックエンドに適用し、アプリが別のDLLをプラグインするだけで他のサイト(おそらくGoogle検索結果)を解析できるようになるという考えです。

私の理解では、通常はDLLを作成して、さまざまなアプリケーション間でコードを共有します。ただし、この場合、私はこの1つの特定のアプリケーションのモジュール性のみを探しています。この場合でもDLLを作成するのは適切ですか?または、すべてのクラスを1つのアセンブリにまとめるなど、別のオプションを検討する必要がありますか?

私はプログラミングに比較的慣れていないので、答えが「いいえ」であっても、これは私が学ぶための良い演習になることに注意する必要があります。その場合は、この演習をより適切にするためにとにかく変更する必要があるかどうかを知りたいと思います。

4

3 に答える 3

7

この状況で DLL を使用するというあなたの考えは良い考えだと思います。DLL を使用しても、それほど大きな追加コストは発生しません (せいぜい起動コストが少し高くなる可能性があります)。また、現在この 1 つのアプリケーションでのみ使用することを計画している場合でも、将来の変更を計画することに問題はありません。DLL は、必要に応じて別のアプリケーションでほとんどまたはまったく変更せずに使用できる可能性が常にあります。

さらに、モジュール性のために個別の DLL に分割すると、設計および開発プロセスに役立つ場合もあります。これにより、グローバル データの「共有」がより困難になります (これはおそらく良いことです)。すべてが 1 つのモノリシック アセンブリにある場合、他の場所からデータを取得する傾向があるかもしれません。そのデータが別のアセンブリに存在する場合、その潜在的に悪い習慣が発生する可能性は低くなります。開発者は、問題を解決する方法を再考せざるを得なくなる可能性があります。

于 2010-08-17T22:36:44.383 に答える
1

DLLを作成することにはいくつかの利点があります。

  • DLLは、呼び出し元プログラム(フロントエンド)から独立して変更できます。
  • DLLは、呼び出し元の問題(フロントエンド)とは関係なく、単独で配布できます。
  • 複数の同時に実行されているソフトウェアが同じDLLを使用する場合、メモリフットプリントは小さくなります

また、コストがかかります:

  • 単純な継承スキームを使用してDLLクラスを拡張することはできません
  • グローバルデータを共有することはまだ可能ですが、より困難です(これはより良い設計を強制すると言う人もいますが、それでも制約です)
  • DLLに含まれるコードの単体テストはより困難です
  • インストールの問題があります(dllは、使用方法に応じて、特別な場所に配置して登録する必要があります)

しかし、モジュール性に関する主なポイントは、DLLがまだ半分の尺度であるということです。コストを無視しても、libや既存のクラスを再利用するよりもはるかに優れているわけではありません。主な利点は、サードパーティの貢献者を期待する場合を除いて、実際にはソフトウェア開発者ではなく、再販業者にとってです。また、呼び出された関数は、メインプログラムと同じプロセスで実行されています。

モジュール性のための真のクリーンカットが必要な場合は、フロントエンドとバックエンドの別々のプロセスとそれらの間の通信層(TCPソケットなど)を備えた真の多層アーキテクチャを使用できます。これは通常、より用途が広く、より堅牢であり、プロジェクトの初期段階で行うとそれほど複雑ではありません。

于 2010-08-17T23:22:54.420 に答える