オブジェクト指向設計


コアJ2EEパターン - Service to Workerパターン

2008/07/27 22:27Update
TAGS: J2EE | パターン | Service to Worker

Syboos.jp編集長

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

Sponsored Link