ソフトウェアでは、コンポーネントとモジュールをどのように区別しますか?
7 に答える
答えは、あなたが誰に尋ねるかによって異なります。
違いは、粒度と役割の 1 つだと思います。私の理解では、ソフトウェア コンポーネントは、システムの残りの部分と相互作用し、システム アーキテクチャの観点から重要な意味を持つ、明確に定義された (そしてできれば安定した) インターフェイスを備えた自己完結型のエンティティです。例としては、データ アクセス抽象化レイヤーがあります。
私にとってのモジュールとは、共通の目的を共有するがシステム内で重要な役割を果たさないコードを含むデプロイ可能なソース コード バンドルのことです (つまり、モジュールを置き換えるためにシステム全体のアーキテクチャを変更する必要はありません)。例として、Web サービスの JSON シリアライザーがあります。
一般的に言えば、
- コンポーネントは、ソリューション内の特定のサービスを提供する要素の比較的きめ細かいグループです。
- モジュールはコースグレインであり、ソフトウェアによって提供される1つ以上の関連サービスのグループとして機能します。
モジュールはそのサービスを提供するために多くのコンポーネントを利用する傾向がありますが、コンポーネントは少数のクラスやその他のコンポーネントから構築される可能性があります。
いずれにせよ、その主観的であり、アプリケーションの規模によって異なります。小さなアプリケーションの場合、単一のプログラム(モジュール)と多数のコンポーネントが存在する可能性があります。中規模のアプリケーションでは、複数のモジュールと多くのコンポーネントが存在する可能性があります。大規模なアプリケーションでは、モジュールよりもさらに粗いサブシステムという用語を導入することをお勧めします。
モジュールは、ソフトウェアに新しい機能を与える機能です。
コンポーネントは要素です
コンポーネントは、一般に、ある種のソフトウェア インターフェイス仕様に従う自己完結型のプラグ可能なアイテムと見なされます。良い例は、強化されたテキスト ボックスやドロップダウンなどの GUI アイテムです。基本的に、完全なプログラムではないが、機能を強化するために別のプログラムにプラグインできるもの。
モジュールという言葉は、ここ数年で人気がなくなりました。Module はより一般的な用語ですが、Modula 2 などのキーワードとして使用する言語もあります。VB.NET には Module キーワードがありますが、これは静的メンバーを持つ通常のクラスにすぎません。私の理解では、ほとんどの VB プログラマーは使用することを好みます。クラスキーワード。
コンポーネントは、ソフトウェア システム レベルで定義されます (実行時に見られる/考えられる)。それらは実行システムの要素であり、一緒になってより大きなシステムを構成します。これらのコンポーネント/要素は、コネクタ (インターフェース) を使用して相互に作用します。ブラック ボックスが相互に通信していると想像してください。それらの実装/ソース コードには注意が払われません。
モジュールはプログラミング言語レベルで定義されます (たとえば、5 つのクラスのセットは、いくつかの機能を提供するモジュールを構成します)。これらは、そのコード コレクションによって提供される機能に従って、ソース コード レベルで定義されます。(例: データベースとの対話を担当するアプリケーションの永続化クラス)。
モジュールはコンポーネントの一種でもあることに注意してください (分類によって進み、コンポーネントとの「is-a」関連付けを共有します)。
参照: Len Bass、ソフトウェア アーチ。ティモシー・レスブリッジ博士の講義
コンポーネント: ブラック ボックス モジュール。
しかし、実際には大きな違いはありません。ここで深い意味を探そうとしないでください。
コンポーネントはモジュールの別名であり、同じものです。通常、コンポーネントはソフトウェア エンジニアリングの本に記載されている用語ですが、モジュールはより広く使用されています。