web-dev-qa-db-ja.com

モジュールとコンポーネントの設計

モジュール設計とコンポーネント設計の違いは何ですか?

30
ms80

この違いについて私の考えを共有したいと思います。

コンポーネントとモジュールの両方は、関数のグループまたは関数の一部を参照するために使用されます。モジュールはより論理的です。例:モジュールファイナンス、モジュールHR、モジュール製造... in ERP system。一方、コンポーネントはより物理的です。ソフトウェアでは、dllにすることができます。 、ocx、exe、...

どちらが大きいかを測定する基準はありません。 1つのコンポーネントにモジュールのリストを含めることができ、1つのモジュールに多くのコンポーネントを含めることもできます。コンポーネントはシステムをテクニカルビューでモデル化するために使用され、モジュールはシステムを機能ビュー(システムの機能)でモデル化するために使用されます

20
Tin

OSGiの動作に関するリファレンスがあり、違いが非常に良いことを説明していると私は信じていました。

モジュールとコンポーネントモジュールとコンポーネントには多くの共通点があるように思えませんか?彼らはお互いに物を提供し、お互いから物を消費します。また、独立した展開ユニットとしてパッケージ化されています。これら2つを1つと同じ、または少なくとも組み合わせることができないでしょうか?はい、可能ですが、コンポーネントとモジュールは異なる目的で機能し、ある程度直交しています(コンポーネントは最終的にモジュールにパッケージ化できるコードから作成されるため、完全に直交しているわけではありません)。モジュールは、コードのパッケージ化とコード間の依存関係を扱います。コンポーネントは、上位レベルの機能とコンポーネント間の依存関係の実装を扱います。コンポーネントは、コードの依存関係を管理する必要がありますが、技術的にはそれを行うためのモジュールシステムは必要ありません(多くの場合、プログラマーはクラスパスを介してそれを行います)。要約すると、モジュールは静的コードとコンパイル時の依存関係を扱うと考えることができますが、コンポーネントはインスタンスと実行時の依存関係を扱うと考えることができます。

10
Moses

コンポーネントとモジュールが互いに混同されることがよくあります。ただし、これらは同じではなく、一方の影響が他方に当てはまるとは限りません。

モジュール性とは、コードを関連する機能のモジュールに分割することです。多くのプログラミング言語では、モジュールは単なるソースファイルです。ソースファイルが大きくなりすぎた場合は、それを2つ以上のソースファイルに分割し、これらを新しいディレクトリに配置することが一般的です。多くの場合、ディレクトリはモジュールと呼ばれませんが、この種の分解はモジュール化されています。

一方、コンポーネントは、さまざまな方法で他のコンポーネントと組み合わせてさまざまなプログラムを形成できます。つまり、実際の人々がどのコンポーネントを一緒に使用する必要があるかを決定する、別個の構成段階があります。

ハードデザインの概念を適用するためにコンポーネントデザインが使用されているのを見てきました。構成にはかなりのオーバーヘッドがあるため、このアプローチはお勧めできません。構成の複雑さは、コンポーネントの数とともに多項式を増加させます。また、コンポーネントの数は、機能グループの数とともに直線的に増加します。これは、コンポーネント分解によるモジュール化を開始すると、新しいモジュールが必要な場合は常に、新しいコンポーネントを作成することを強制するためです。本当にどこにでも属しています。 100個のコンポーネントでは、コンポジションのオーバーヘッドがフルタイムの仕事になり、多数の自動化作業にもかかわらず、コンポジションの反復ごとに数週間かかる場合があります。これは開発を著しく妨げました。

私の最も簡単な推奨事項は、可能な限りコンポーネントに近づかないようにすることです。コンポーネントが必要になる場合があることを十分に理解している。たとえば、プロジェクトに複数の独立した組織が関与している場合、各組織に1つのコンポーネントを使用できます。

モジュール化が良いことであることに誰もが同意しますが、それは好みの問題であり、モジュールへの分解をどのように細かくすべきかです。

関数の名前がわかっていれば、編集者はすぐにそれを見つけるでしょう。一方で、何らかの理由で関数(またはそのクラス)の名前がわからない場合は、モジュール性がより重要になります。

後者の場合は、プログラムを使用して体験できる機能の問題にすぎないので、プログラムをモジュールに分解すると、プログラムの動作が機能の領域に直感的に分解されるようにしてください。

モジュール性という意味でモジュールを意味する場合、ソフトウェアエンジニアリング用語集のIEEE標準用語集に定義があります。

「モジュール性とは、1つのコンポーネントへの変更が他のコンポーネントに与える影響が最小限になるように、システムまたはコンピュータープログラムが個別のコンポーネントで構成される度合いです。」

そして Dr。Bertrand Meyer はモジュール性の5つの基準を述べました:

  • 問題の副問題への分解可能性
  • 新しいシステムを作成するためのモジュールの構成可能性
  • 独立したモジュールの理解可能性
  • 継続性-小さな変更には局所的な影響があります
  • 保護-障害分離
6
Simson

デジタル開発とUIの検討(HTML/CSS/JS)については、このアプローチを使用して、実行前に整理された状態で考えていることを確認します。よりクリーンで組織化されたコードを作成できることが証明されています。

典型的なスタイルシートでは、現在次のように設定しています。

/* Style Guide – Mobile First
   1. =Setup
   2. =Modules as independent units made up of components
   3. =Components as group of reusable code containing more than one element
   4. =Classes
   5. =Responsive as enhancement
*/
  • コンポーネントで構成される独立したユニットとしてのモジュール:ヘッダー、フッター、セクション、記事、脇など。家は多くの部屋で構成され、すべてが独立した全体を作成するための特別なスタイルと機能を備えています。
  • 複数の要素を含む再利用可能なコードのグループとしてのコンポーネント:順序なしリスト、引用、カード、テーブルなど。

私はあなたが読むことができるより完全な説明を書きました ここ

お役に立てれば!

3
CR Rollyson

私の見解では、ModuleComponentはすべて、いくつかの関数とアセットです。

そしてそれらの違いは:

コンポーネントにはビジネス論理があり、モジュールはありません。

たとえば、このテキスト入力領域は単なるモジュールですが、いくつかのポストAPIが呼び出されたとき、それはコンポーネントになります。あなたはどこにでもモジュールを置くことができ、それはうまくいきますが、Componetは特定のページまたはビューで使用することができます(特定のAPI呼び出しがあります)

2
A.Chan

コンポーネントはランタイムエンティティ(モジュールで構成可能)、独立した実行可能ユニットです

モジュールは、実装ユニット、独立したタスク割り当てに分割されたシステムです。モジュールはコンポーネントである場合とそうでない場合があります

1
Bao Pham