モジュール化の利点
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Dictionary.com定義 モジュール としての 電子的または機械的システムを組み立てるのように個々に異なる機能単位の使用。 個別の機能ユニットは モジュールと呼ばれます。
たとえば、NASAのアポロ宇宙船は、それぞれが異なる機能を持つ3つのモジュールで構成されていました。
- 月のモジュール:アポロ宇宙船から月面までの宇宙飛行士を運んだ。
- サービスモジュール:推進、空調、および水用の燃料を提供しました。
- コマンドモジュール:宇宙飛行士と通信およびナビゲーションコントロールを収容。
宇宙船とそのモジュールは、これらのモジュール性の特徴を例示しました。
-
個別の機能:各モジュールは個別の機能(目的)を提供します。モジュールを組み合わせて、まったく新しい集合機能を提供できます。
アポロ宇宙船のモジュールは、明確な集合的機能のために一緒にグループ化されました。宇宙飛行士を地球の大気圏縁から月の表面に連れて行き、地球に戻します。 前のリストは、各モジュールの個別の機能を示しています。
-
依存関係:モジュールには、他のモジュールが満たす機能が必要な場合があります。
Apolloモジュールには次の依存関係がありました。
-
月面モジュールは月に近づくためにサービスモジュールに依存していました。
-
コマンドモジュールは、電力と酸素をサービスモジュールに依存していました。
-
サービスモジュールは命令をコマンドモジュールに依存していました。
-
-
カプセル化:モジュールは実装の詳細を非表示にしますが、機能とインターフェイスを公に定義します。
各Apolloモジュールは、そのモジュールの詳細が他のモジュールからカプセル化(非表示)されている間、その機能とインターフェースを定義する契約の委託を受けました。 NASAは、インターフェイスに基づいてモジュールを統合しました。
-
再利用性:モジュールはさまざまなシナリオに適用できます。
コマンドモジュールの構造と設計は再利用可能でした。 NASAは、たとえば、Apolloプログラム全体と、地球軌道に焦点を当てたGeminiプログラムで、コマンドモジュールの異なるバージョンを使用しました。
NASAはモジュール方式を使用して、月への12を超えるミッションを正常に完了しました。 モジュール性はソフトウェアにもメリットがありますか? はい\! 次のセクションでは、その方法を示します。
ソフトウェアのモジュール性の利点
Javaアプリケーションは主にモノリシックです。大規模なコードベースで開発されています。 モノリスでは、クラスの密結合を避けることは困難です。 逆に、モジュール式のアプリケーション設計により、疎結合が容易になり、コードの保守が容易になります。 モジュールで少量の凝集コードを開発する方がはるかに簡単で楽しいです。 モジュラーソフトウェアを開発する主な利点を次に示します。
明確な機能
一度に1つのソフトウェアの開発に集中するのは自然なことです。 モジュールでは、モジュールの機能を定義および実装するクラスの小さなセットで作業します。 スコープを小さく保つことで、高品質でエレガントなコードを作成しやすくなります。 コードの凝集性が高いほど、テスト、デバッグ、保守が容易になります。 モジュールを組み合わせて、各モジュールの機能と区別できる新しい機能を提供できます。
カプセル化
モジュールは関数(機能)をカプセル化します。 モジュールの実装はコンシューマから隠されているため、必要に応じて作成および変更できます。 モジュールの有効期間を通して、実装を修正および改善したり、まったく新しい実装に交換したりできます。 消費者に透過的に、舞台裏で変更を行います。 モジュールのコントラクトは、その機能とインターフェイスを定義し、モジュールの理解と使用を容易にします。
依存関係
モジュールには要件と機能があります。 モジュール間の相互作用は、他のモジュールの要件を満たすなどの機能の機能です。 モジュールは、Maven Centralなどのアーティファクトリポジトリに公開されます。 モジュールのバージョン管理スキームを使用すると、特定のモジュールバージョンまたはバージョン範囲への依存関係を指定できます。
再利用性
うまく機能するモジュールは、ホットな商品です。 さまざまな目的のために、プロジェクト全体で再利用できます。 役に立つ信頼できるモジュールを発見したら、それらを何度も使用します。
モジュラーアプリケーションを設計するときが来ました。
例:モジュラーアプリケーションの設計
多くの場合、アプリケーションの設計は単純なものから始まりますが、アプリケーションに必要な機能を決定すると複雑になります。 サードパーティのライブラリがすでに機能を提供する場合は、することができます あなたのアプリケーションでそれを展開。 それ以外の場合は、自分で機能を実装できます。
機能をサポートするためにアプリのさまざまな側面を設計するとき、それらの側面がコードベースにどのように適合するかを決定する必要があります。 それらを単一のモノリシックコードベースに配置すると、多くの場合、密結合につながりますが、各アスペクトに個別のモジュールを指定すると、疎結合が促進されます。 アプリケーション設計にモジュール式アプローチを採用すると、モジュール性のメリットを享受できます。
たとえば、モジュラーデザインを音声認識アプリに適用できます。アプリの機能と必要な機能は次のとおりです。
機能:ユーザーが音声をテキストに変換して、コンピューターが理解できるようにするインターフェイス。
必要な機能:
- ユーザーの単語をテキストに翻訳します
- 選択したコンピューターの音声を使用してユーザーに話しかけます。
- 質問、コマンド、リクエスト、確認を含む指示のスクリプトに基づいてユーザーと対話します。
必要な機能を提供するモジュールを作成できます。
- 音声からテキストへ:話し言葉をコンピューターが理解できるテキストに変換します。
- 音声UI:保存された質問、コマンド、および確認に基づいてユーザーと対話します。
- 命令マネージャー:アプリケーションの質問、コマンド、および確認を保存および提供します。
- コンピューター音声:ユーザーが選択できるコンピューター音声を保存および提供します。
次の図は、音声認識アプリケーションのモノリシックデザインとモジュールデザインを比較しています。
アプリをモノリスとして設計すると、すべてがひとまとめになります。 アプリケーションの側面間に最初の境界はありませんが、モジュール設計は側面を区別します。
開発者はモジュールを並行して作成でき、各モジュールは独自の特定の機能を備えています。 モジュールを構成するアプリケーションを設計すると、機能を表すまとまりのあるコードを書くことができます。 他のシナリオでも、各モジュールの機能は潜在的に 再利用 になる可能性があります。
例えば、 命令マネージャー および のコンピュータ音声 のモジュールとすることができる 再利用 ナビゲーションアプリによって。
モジュールとして音声認識アプリを設計する利点は次のとおりです。
- 各モジュールは、アプリの全体的な機能に寄与する機能を表します。
- アプリは、開発、テスト、および保守が簡単なモジュールに依存しています。
- モジュールはさまざまなアプリケーションで再利用できます。
結論として、モジュール性は文字通り私たちを月へと連れ戻しました。 ソフトウェア開発にも役立ちます。 サンプルの音声認識アプリケーションは、モジュールで構成されるアプリの設計方法を示しました。
次に、OSGiがサービスを提供および消費するモジュールの作成を容易にする方法を学習します。