コアJ2EEパターン - Service to Workerパターン
2008/07/27 22:27Update
Service to Worker(ディスパッチャ・ビュー)パターンは コアJ2EEパターン の一つ、Front Controller(フロント・コントローラー)とView(ビュー)の間にDispatcher(ディスパッチャ)と呼ばれるコンポーネントを追加し、ビューの管理、ビューの選択などの処理が委譲され、プレゼンテーション層とビジネスロジックを分離します。
Service to Worker(ディスパッチャ・ビュー)パターンは コアJ2EEパターン の一つ、Front Controller(フロント・コントローラー)とView(ビュー)の間にDispatcher(ディスパッチャ)と呼ばれるコンポーネントを追加し、ビューの管理、ビューの選択などの処理が委譲され、プレゼンテーション層とビジネスロジックを分離します。
本文は「問題」、「解決策」、「戦略」、「メリット」などからService to Workerパターンについて説明します。
Front ControllerパターンとView Helperパターンを用いたWEBアプリケーションでは、Front Controllerはリクエストを集中管理する役割を果たし、ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
View Helperはビジネスデータ・アダプタという役割で、データ収集・データ形式の変換などを行います。
しかし、アクセス制御や、ビューの管理、コンテンツの取得などを一元管理できるコンポーネントが存在しません。その結果、それらの処理コードをビューに散在してしまいます。
Combine a controller and dispatcher with views and helpers (see "Front Controller" on page 172 and "View Helper" on page 186) to handle client requests and prepare a dynamic presentation as the response. Controllers delegate content retrieval to helpers, which manage the population of the intermediate model for the view. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller or a separate component.
コントローラ、ディスパッチャとビューや、ヘルパーを組み合わせてクライアントからのリクエストを処理し、ダイナミックなプレゼンテーションをレスポンスします。
◇ コントローラはコンテンツの取得(content retrieval)をビューの表示用データを保持するためのヘルパーに委譲します。
※この点について、Dispatcher Viewと異なりますので、ご注意ください。Dispatcher Viewでは、コンテンツの取得はビューを処理するまで遅延されますので、コントローラは、コンテンツの取得をヘルパーに委譲しません。
◇ ディスパッチャはビューの管理やナビゲーションなどの責務を持ちます。
◇ ディスパッチャはコントローラの内部で実装するか、独立なコンポーネントとして実装することができます。
<<図1:構造>>

Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。また、上の構造図と「Dispatcher View」の構造図を比較見れば分かると思います、Dispatcher Viewでは、ヘルパーを参照するのはビューだけとなっていますが、Service to Workerは、ビューのほか、コントローラや、ディスパッチャからもヘルパーを参照することができます。
<<図2:責務>>

Controller:コントローラ
リクエストを集中して管理します。ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
Dispatcher:ディスパッチャ
ビューの管理やナビゲーションを行います。ディスパッチャはコントローラとして動作することも、独立なコンポーネントとしてもできます。
View:ビュー
プレゼンテーション・ロジック
Helper:ヘルパー
データ収集・データ形式の変換などを行います。一つのビューに複数のヘルパーを配置することができます。
◇ プレゼンテーション・ロジックとビジネス・ロジックの分離
◇ 共通する処理を集約し、再利用が可能
Service to WorkerパターンはFront ControllerとView Helperの組み合わせで、各部分の実装方法によって、次のような戦略があります。
◇ Servlet Front Strategy
フロント・コントローラはサーブレット として実装される戦略
◇ JavaServer Pages Front Strategy
フロント・コントローラはJSP として実装される戦略
◇ JSP View Strategy
ビューにJSPの実装戦略
◇ Servlet View Strategy
ビューにサーブレットの実装戦略
◇ JavaBean Helper Strategy
ヘルパーにJavaBeanの実装戦略
◇ Custom Tag Helper Strategy
ヘルパーはカスタム・タグとして実装される戦略
◇ Dispatcher in Controller Strategy
コントローラの内部でディスパッチャが実装される戦略
◇ Transformer Helper Strategy
ヘルパーはeXtensible Stylesheet Language Transformer(XSLT)として実装される戦略
Front Controller
と View Helper 
Service to WorkerパターンはFront ControllerとView Helperの組み合わせです。
Dispatcher View
Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。
Core J2EE Pattern Catalog 
Core J2EE Patterns - Service to Worker
本文は「問題」、「解決策」、「戦略」、「メリット」などからService to Workerパターンについて説明します。
問題
Front ControllerパターンとView Helperパターンを用いたWEBアプリケーションでは、Front Controllerはリクエストを集中管理する役割を果たし、ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
View Helperはビジネスデータ・アダプタという役割で、データ収集・データ形式の変換などを行います。
しかし、アクセス制御や、ビューの管理、コンテンツの取得などを一元管理できるコンポーネントが存在しません。その結果、それらの処理コードをビューに散在してしまいます。
解決策
Combine a controller and dispatcher with views and helpers (see "Front Controller" on page 172 and "View Helper" on page 186) to handle client requests and prepare a dynamic presentation as the response. Controllers delegate content retrieval to helpers, which manage the population of the intermediate model for the view. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller or a separate component.
コントローラ、ディスパッチャとビューや、ヘルパーを組み合わせてクライアントからのリクエストを処理し、ダイナミックなプレゼンテーションをレスポンスします。
◇ コントローラはコンテンツの取得(content retrieval)をビューの表示用データを保持するためのヘルパーに委譲します。
※この点について、Dispatcher Viewと異なりますので、ご注意ください。Dispatcher Viewでは、コンテンツの取得はビューを処理するまで遅延されますので、コントローラは、コンテンツの取得をヘルパーに委譲しません。
◇ ディスパッチャはビューの管理やナビゲーションなどの責務を持ちます。
◇ ディスパッチャはコントローラの内部で実装するか、独立なコンポーネントとして実装することができます。
<<図1:構造>>
Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。また、上の構造図と「Dispatcher View」の構造図を比較見れば分かると思います、Dispatcher Viewでは、ヘルパーを参照するのはビューだけとなっていますが、Service to Workerは、ビューのほか、コントローラや、ディスパッチャからもヘルパーを参照することができます。
<<図2:責務>>
Controller:コントローラ
リクエストを集中して管理します。ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
Dispatcher:ディスパッチャ
ビューの管理やナビゲーションを行います。ディスパッチャはコントローラとして動作することも、独立なコンポーネントとしてもできます。
View:ビュー
プレゼンテーション・ロジック
Helper:ヘルパー
データ収集・データ形式の変換などを行います。一つのビューに複数のヘルパーを配置することができます。
メリット
◇ プレゼンテーション・ロジックとビジネス・ロジックの分離
◇ 共通する処理を集約し、再利用が可能
戦略
Service to WorkerパターンはFront ControllerとView Helperの組み合わせで、各部分の実装方法によって、次のような戦略があります。
◇ Servlet Front Strategy
フロント・コントローラはサーブレット として実装される戦略
◇ JavaServer Pages Front Strategy
フロント・コントローラはJSP として実装される戦略
◇ JSP View Strategy
ビューにJSPの実装戦略
◇ Servlet View Strategy
ビューにサーブレットの実装戦略
◇ JavaBean Helper Strategy
ヘルパーにJavaBeanの実装戦略
◇ Custom Tag Helper Strategy
ヘルパーはカスタム・タグとして実装される戦略
◇ Dispatcher in Controller Strategy
コントローラの内部でディスパッチャが実装される戦略
◇ Transformer Helper Strategy
ヘルパーはeXtensible Stylesheet Language Transformer(XSLT)として実装される戦略
関連パターン
Front Controller
と View Helper 
Service to WorkerパターンはFront ControllerとView Helperの組み合わせです。
Dispatcher View

Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。
その他参考資料
Core J2EE Pattern Catalog 
Core J2EE Patterns - Service to Worker
Sponsored Link
- Relative Articles
- コアJ2EEパターン - Composite View(複合ビュー)パターン - (2008/08/05 00:04)
- コアJ2EEパターン - Dispatcher Viewパターン - (2008/07/27 21:34)
- コアJ2EEパターン - View Helperパターン - (2008/07/15 23:48)
- コアJ2EEパターン - Data Access Objectパターン - (2008/07/13 21:34)
- コアJ2EEパターン - Business Delegateパターン - (2008/07/11 00:57)
- コアJ2EEパターン - Session Facadeパターン - (2008/07/11 00:51)
- コアJ2EEパターン - Intercepting Filterパターン - (2008/06/29 23:07)
- コアJ2EEパターン - Front Controllerパターン - (2008/06/29 20:28)