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