目次
J2EEを使って開発するなら、まずは読まなきゃだめでしょう。
http://archives.java.sun.com/j2eepatterns-interest.html
http://www.corej2eepatterns.com/
パターンカタログ
プレゼンテーション層のパターン
Intercepting Filter
- 文脈
プレゼンテーション層では、リクエストをさまざまな方法により処理しなければならない
- 問題
- 解決策
フィルタは入力リクエストと、出力レスポンスを横取りし、前処理と後処理が行えるようにする。
Front Controller
- 文脈
プレゼンテーション層のリクエスト処理では、複数のリクエストにまたがった各ユーザの処理を制御、統合する必要があり、集中または分散管理する。
- 問題
- 各ビューで独自にサービスを提供する必要が発生し、コードが重複
- ビューのナビゲーションがビュー自身に任され、コンテンツとナビゲーションが混在してしまう
- 制御が分散すると保守が困難
- 解決策
リクエストを処理するための最初の入り口として、コントローラを使用し、リクエストの処理を管理する。
View Helper
- 文脈
表示用コンテンツ作成のために、ビジネスデータを動的に処理する必要がある
- 問題
- 解決策
Composite View
- 文脈
複雑なWebページでは、1つの表示用ページを、複数のサブビューを使って、多数のデータソースから集めたコンテンツを表示することで構成する
- 問題
- 解決策
Service to Worker
- 文脈
システムは実行のフローとビジネスデータに対するアクセスを制御し、ビジネスデータから表示用のコンテンツを作成する
- 問題点
- 解決策
Service to Workerでは、ディスパッチャコンポーネントを利用した、Front ControllerパターンとView Helperパターンの組み合わせを記述する
- コントローラはコンテンツの検索をヘルパーに委譲
- ヘルパーはビュー用の中間的なモデル生成を管理
- ディスパッチャは、ビューの管理とナビゲーションの責務をもつ
Dispatcher View
- 文脈
システムは実行のフローと表示処理に対するアクセスを制御し、表示処理では動的コンテンツの生成に関する責務を持つ
- 問題点
- 解決策
- コンテンツの検索はビュー処理時まで遅延されるので、コントローラは処理をヘルパーに委譲しない
- ディスパッチャは、ビューの管理とナビゲーションの責務を持つ
ビジネス層のパターン
Business Delegate
- 文脈
多層分散型システムでは、層をまたがったデータの送受信には、リモートメソッド呼び出しを行う必要があり、クライアントは複雑な処理が必要
- 問題
さらにネットワークパフォーマンスに悪影響
- 解決策
Value Object
- 文脈
クライアントはエンタープライズBeanとデータをやり取りする必要がある
- 問題
- サーバ側のビジネスコンポーネントをセッションBeanやエンティティBeanとして実装している。
- ビジネスコンポーネントのメソッドの中には、クライアントにデータを返すものがある
- 多くの場合、クライアントが必要な属性地をすべて取得するには、getメソッドを複数回呼び出す必要がある
- このメソッド呼び出しは、リモートで行われる可能性があり、ネットワークのオーバーヘッドが伴う。
- このような呼び出しが頻繁におきると、パフォーマンスが大きく低下する
- 解決策
Value Objectを使ってビジネスデータをカプセル化し、1回のメソッド呼び出しで、バリューオブジェクトを送受信する。
Session Facade
- 文脈
エンタープライズBeanは、ビジネスロジックとビジネスデータをカプセル化し、インターフェースを公開する。分散サービスの複雑な部分が見えてしまう
- 問題
- 結合度が高くなり、クライアントとビジネスオブジェクトとの間に直接の依存関係が発生
- クライアント、サーバ間のメソッド呼び出しが多くなり、ネットワークパフォーマンスの問題が発生
- クライアントからの一貫した呼び出し方法がなく、間違った使われ方をする
- 解決策
セッションBeanをファサードとして使うことで、ワークフローに参加するビジネスオブジェクトどうしの複雑な相互作用をカプセル化する。Session Facadeは、ビジネスオブジェクトを管理し、クライアントに対して一貫した粗粒度のサービスアクセスレイヤを提供する
Composite Entity
- 文脈
エンティティBeanはオブジェクトモデル内の個々の永続オブジェクトを表現するためのものではなく、より粗粒度の永続ビジネスオブジェクトを表現するのに適している
- 問題
- 解決策
永続オブジェクトとは、何らかの種類のデータストアに格納されるオブジェクトで、通常複数のクライアントにより共有される。
Value Object Assembler
- 文脈
アプリケーションクライアントはしばしば、セッションBeanやエンティティBean、DAO等、複数のオブジェクトから構成されたデータにアクセスしなければならない
- 問題
- 解決策
Value List Handler
- 文脈
表示用のサービスに対してクライアントが項目のリストを要求するが、項目数は不明でああり、かなり大きくなる可能性がある
- 問題
リモートオブジェクトの集合を返す、ejbFind()メソッドを呼び出し、各エンティティBeanに対して値のリストを取得するという方法は、ネットワーク負荷が高く悪い方法と考えられている
- 解決策
Value List Handlerは、必要な問い合わせを実行できるDAOに直接アクセスする。
Service Locator
- 文脈
サービスを検索し生成するために、複雑なインターフェースやネットワーク操作が必要
- 問題
J2EEクライアントはすべてJNDIの共通機能を使ってコンポーネントの検索や生成を行い、その検索処理はクライアントに共通であるため、多種多様なクライアントにそのコードが散在してしまい、不必要に重複してしまう
- 解決策
Data Access Object
- 文脈
データに対するアクセス方法はデータソースによって異なる。
- 問題
- 解決策
Service Activator
- 文脈
エンタープライズBeanと他のビジネスサービスを、非同期に活性化する方法が必要
- 問題
- 解決策
YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto
Copyright© 矢木 浩人 All Rights Reserved.