デスクトップアプリケーションをモジュール化する方法は?
-
06-07-2019 - |
質問
Javaデスクトップアプリケーションをモジュール化するにはどうすればよいですか?モジュールはどのように分類されるべきですか?
解決
設計目標として、モジュール性とは、各パーツが責任範囲を持ち、そのエリアに関係するすべてのクラスを含む個別のパーツ(モジュール)で構成されるアプリケーションが必要であることを意味します(高凝集)、これらのパーツ間の通信は、狭く明確に定義された文書化されたインターフェース(疎結合)。
事前に設計を計画し、それらの計画を調整し、実装中にコードを常にリファクタリングすることでこれを達成します。
GUI、ネットワーク通信、DBアクセス(多くの場合、レイヤーを形成しますが、これらはいくつかのモジュールに分割される場合があります)などの技術モジュールと、アプリケーション固有のロジックを含むドメインモジュールを区別すると便利です多くの場合、レイヤーを形成しません。
他のヒント
OSGiテクノロジーをご覧ください。アプリケーションの各モジュール(バンドルと呼ばれる)は個別のjarであり、OSGiは依存関係の解決とバンドルクラスパスなどの動的なロードを処理します。
デスクトップアプリケーションについては、 www.dynamicjava.org のDA-Launcherをご覧になることを強くお勧めします。アプリのデプロイが非常に簡単になります。また、動的JPAなど、OSGiアプリに役立つものもいくつかあります。
Eclipseのようなモジュール式ですか?
JavaデスクトップアプリケーションをEclipse RCPまたはNetBeans RCPに基づいている場合、「無料」のモジュール性が得られます。 (ほぼ;-))
質問への答えは、" modular" の意味によって異なります。
アプリケーションをモジュール化する際に考慮しなければならない懸念事項がいくつかあります。
まず、「モジュール性」が求めているのは、アーキテクチャのモジュール性、展開時間のモジュール性、またはランタイムのモジュール性です。
いずれの場合でも、連続するレベルはすべて、以前のすべてのレベルを意味します。
初心者向け-アプリケーションをモジュール化するには、アーキテクチャから始める必要があります。 「外の世界」への明確に定義されたインターフェースを持つ、明確に定義されたクリーンカットパーツに懸念を分けます。優れたデザインパターンおよび依存性注入およびの設計ユニットのテスト容易性は、モジュール設計の基盤である懸念事項を適切に分離することに向けて大きく前進します。
小さなものから始めますが、大きな画像に留意してください。システムの少し大きいチャンク(またはモジュール)を設計するときは、重複する領域ができるだけ少ないことを確認してください。すべてのモジュールは、実行する環境についてほとんど想定せず、1つの懸念のみに対応する必要があります。ピアから必要なサービスは、外部初期化によって明示的に提供する必要があります(モジュールを動作中のアプリに接着するために依存性注入を使用することが望ましい)。
アーキテクチャがモジュール式の場合、懸念事項を独自のデプロイメントユニット( projects 、 jars 、 bundles 、プラグイン、拡張機能など)、展開中にさまざまなモジュールを簡単に組み合わせて一致させ、特定の機能に必要な機能セットを取得できますアプリケーションインスタンス。これが、展開時間のモジュール性の意味です。
展開時間のモジュール化を可能にするための長い道のりは、 Guice 、 Spring framefork など。
ランタイムモジュール性これは、EclipseおよびNetBeansプラグインまたはMozilla拡張機能によって提供されるモジュール性に似たもので、デプロイメント/インストール後にアプリケーションモジュールの構成とセットを変更できます。
これは、アプリケーションの初期化時または実行時に動的に新しいプラグイン/拡張機能を認識する何らかのアーキテクチャとインフラストラクチャを意味します。
また、モジュールが使用するサービスはいつでも簡単に消えることができるという暗黙の前提ですべてのモジュールを構築する必要があることを意味し、この不安定な世界で実行されるコードの堅牢性を確保するための特別な努力をします
また、Eclipse RCPをお勧めするか、Netbeans RCPをご覧ください。 2つは非常に似ています。それらを区別する1つのことは、Eclipse RCPはNetbeansが使用するSwingの代わりにネイティブGUIライブラリを使用することです。
長所と短所は、オペレーティングシステムが提供するコントロールの種類に限定されているものの、Elcipseが少し高速になる可能性があることです。 Netbeansは、ほとんどのJava開発者に馴染みのあるSwingを使用しており、カスタムコントロールを開発する機能は無限です。
Eclipse RCPで作業してからしばらく経ったので、Eclipse RCPでカスタムコントロールを開発することはおそらく間違っています。
共通しているのは、スマートでモジュール式のデスクトップアプリの開発が楽しく、プロ並みのアプリをはるかに短時間で取得できることです!
がんばって!
Java Plug-in Frameworkもご覧ください。
JPFはモジュール性を大幅に改善できます Javaシステムの拡張性 サポートとメンテナンスを最小限に抑える コスト。