デザインパターン は、一般的であり、繰り返し起こる問題を解決する実証済みの解決策です。アブストラクションレベルでは、しばしば、問題に対する専門的な解決策をデザインパターンで記述します。
パターンによって、開発者は、問題を個々の要素に分けることができるようになります。これにより、コードの保守性や再利用性が高くなり、コードも理解しやすくなります。また、デザインパターンの要素もカスタマイズや埋め込みが可能で、互いに自在に結合します。パターンの部品は、アプリケーションを中断することなく追加または削除を行うことができます。このような透明性により、作業上の矛盾を最小限に抑えながら、さまざまなタイプの開発者がプロジェクトに取り組むことができます。
この章では、J2EE コンテキストでのデザインパターンについて説明していきますが、これらの多数の技術はどのようなプログラミング環境にも応用できます。
通常、パターンはテンプレートフォームで作成します。1 つのパターンで複数のパターンを記述する場合もあります。この章では、デザインパターンを構成して記述するための簡略化されたテンプレートを使用します。次の表で、このテンプレートを説明します。
セクション |
説明 |
名前 |
パターンの一般名。 |
問題 |
開発者が直面するデザイン上の課題を説明します。 |
解決策 |
問題を解決するための高レベルアプローチ。 |
戦略 |
低レベルにおけるパターンの実装方法を説明します。 |
Sun の Web サイトに掲載されているデザインパターンカタログには、より強力なテンプレートが紹介されています。Sun テンプレートには、目的、動機、応用性、構造、参加者、コラボレーション、結果、実装が含まれています。詳細については、http://java.sun.com/blueprints/patterns/j2ee_patterns を参照してください。
『Core J2EE Patterns』には、コンテキスト、問題、フォース、解決策、および結果を定義したテンプレートを若干変更したものを紹介しています。
デザインパターンの実装には、Web アプリケーション構築のための階層手法を使用する必要があります。これらの階層は次の要素で構成されています。
クライアント層は、アプリケーションにアクセスするすべてのデバイスおよびシステムで構成されます。これらのデバイスやシステムには次のものがあります。
各タイプのクライアントはさまざまな方法でアプリケーションと通信するので、Web アプリケーションからクライアント層を分離すると便利です。クライアントを識別し、適切な形式のデータを返す役割は、クライアント層の下の階層が担当します。
プレゼンテーション層には、ユーザーインターフェイス、認証、承認の構築やセッションステートの管理などのプレゼンテーションロジックがカプセル化されています。プレゼンテーション層は、ビジネス層にアクセスするためのさまざまな方法をクライアントに提供します。この階層はビューとも呼ばれます。
J2EE では、プレゼンテーション層は、サーブレットおよび JSP として実装されます。これらのコンポーネントは、クライアントビューを簡単に生成できるように特別にデザインされています。各クライアントには、さまざまな形式のデータが必要になります。プレゼンテーション層は、アプリケーションのロジックから出力 (またはレスポンス) の形式を分離するのに役立ちます。
ほとんどのパターンのデザインには、いくつかのフォームのプレゼンテーション層があります。次のパターンにはプレゼンテーション層が含まれています。
ビジネス層は、アプリケーションのビジネスロジックを担当します。ビジネス層は、プレゼンテーション層からの変数データおよびユーザー入力に基づいて出力を生成し、プレゼンテーション層に渡します。ビジネス層は通常、EJB として実装されますが、サーブレットおよび JavaBeans が含まれている場合があります。ビジネス層は、しばしばヘルパークラスという形態をとります。
インテグレーション層は、データベース、CRM システム、レガシーアプリケーションなどの外部リソースとの通信の管理を担当します。
よくデザインされた Web アプリケーションの階層は、J2EE プラットフォームのロール (役割) の定義に相当します。J2EE プラットフォームでは、Web アプリケーションの開発ライフサイクルの中で、さまざまな人々が個々のロールを担当します。これらの人々はそれぞれ、次の表に示すように Web アプリケーションの 1 つのロールを担当します。
しばしば、1 人の人間が複数のロールと作業を担当します。デザインパターンは、疎結合性を利用することによってアプリケーションコンポーネントの独立性を維持するのに役立ちます。たとえば、データベースインテグレーションロジックはプレゼンテーションロジックから分離する必要があります。依存関係を排除することにより、アプリケーションはさまざまなシステムおよびプラットフォームに移植できるようになります。
クラスやコンポーネントが属している階層が明確に識別できない場合はデザインに問題があります。たとえば、データベースにアクセスする JSP があると、その JSP がプレゼンテーション層に属しているのか、インテグレーション層に属しているのかを識別できません。
MVC (Model-View-Controller) デザインパターンはよく知られているデザインパターンです。MVC デザインパターンは、アプリケーションを 3 つの層に分けて定義します。
MVC アプリケーションには、コントローラを変更することによって、新規クライアントビューを追加したり、アプリケーションとのクライアント対話をすばやく更新したりできるという利点があります。
MVC の最も一般的な実装は Struts フレームワークです。詳細については、 「Struts について」 を参照してください。MVC パターンは、Dispathcer View パターンおよびこの章で説明している他のいくつかのパターンに密接に関連しています。
J2EE には、デザインパターンの概念構造をエミュレートするのに役立つ多数のコンポーネントやアブストラクションが用意されています。これらの一部のツールの機能は重複していますが、全体的な構造では独自の能力を発揮します。次の表で、これらのツールの一部について説明します。