| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
151 バイト追加 、 2020年2月16日 (日) 04:27
編集の要約なし
{{amazon|4894714345}}
J2EEを使って開発するなら、まずは読まなきゃだめでしょう。[[J2EE]]を使って開発するなら、まずは読まなきゃだめでしょう。
http://archives.java.sun.com/j2eepatterns-interest.html
http://www.corej2eepatterns.com/
==パターンカタログ==
[[J2EEパターン]]{{category | [[Category:パターン}}]]
===プレゼンテーション層のパターン===
====Intercepting Filter====
クライアントからのWebリクエストやレスポンスに対して、前処理や後処理が必要
=====解決策=====
プラグイン可能なフィルタを作成し、リクエスト処理コードのコア部分への変更が不要な標準的な方法で共通サービスを処理。[[プラグイン]]可能なフィルタを作成し、リクエスト処理コードのコア部分への変更が不要な標準的な方法で共通サービスを処理。
フィルタは入力リクエストと、出力レスポンスを横取りし、前処理と後処理が行えるようにする。
[[File:0684_filter.jpg]]
リクエストを処理するための最初の入り口として、コントローラを使用し、リクエストの処理を管理する。
[[File:0685_frontctrl.jpg]]
====View Helper[[Help]]er====
=====文脈=====
表示用コンテンツ作成のために、ビジネスデータを動的に処理する必要がある
=====問題=====
プレゼンテーション層の変更は頻繁に発生するが、ビジネスデータのアクセスロジックと表示用のロジックが絡み合っていると、開発、保守が困難プレゼンテーション層の変更は頻繁に発生するが、ビジネスデータのアクセス[[ロジック]]と表示用の[[ロジック]]が絡み合っていると、開発、保守が困難
=====解決策=====
ビューは整形用コードのみを含み、処理に関する責務をJavaBeanまたは、カスタムタグとして実装されたヘルパークラスに委譲する。また、ヘルパーにはビューのための中間データモデルが格納され、ヘルパーはビジネスデータに対するアダプタの働きをするビューは整形用コードのみを含み、処理に関する責務を[[Java]]Beanまたは、カスタムタグとして実装されたヘルパークラスに委譲する。また、ヘルパーにはビューのための中間データモデルが格納され、ヘルパーはビジネスデータに対するアダプタの働きをする{{ref_image [[File:0696_viewhelpervi]]ewhelper.jpg]]}}
{{ref_image [[File:0697_viewhelper2vi]]ewhelper2.jpg]]}}
====Composite View====
=====文脈=====
=====解決策=====
複数の原子的なサブビューから構成された複合ビューを使用する。テンプレートの各コンポーネントは全体ビューの中に動的に組み込まれ、ページレイアウトはコンテンツとは別に管理できる
{{ref_image composite[[File:0678_compositeviewvi]]ew.jpg]]}}{{ref_image composite[[File:0679_compositeview2vi]]ew2.jpg]]}}====Service Ser[[vi]]ce to Worker====
=====文脈=====
システムは実行のフローとビジネスデータに対するアクセスを制御し、ビジネスデータから表示用のコンテンツを作成する
=====問題点=====
アクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネスロジックと、整形用ロジックが、ビューに入り混じっているアクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネス[[ロジック]]と、整形用[[ロジック]]が、ビューに入り混じっている
=====解決策=====
コントローラとディスパッチャをビューやヘルパーと組み合わせて、クライアントからのリクエストを処理する。
Service to Workerでは、ディスパッチャコンポーネントを利用した、Front ControllerパターンとView Helperパターンの組み合わせを記述する[[Help]]erパターンの組み合わせを記述する
*コントローラはコンテンツの検索をヘルパーに委譲
*ヘルパーはビュー用の中間的なモデル生成を管理
*ディスパッチャは、ビューの管理とナビゲーションの責務をもつ
{{ref_image ser[[File:0690_servicetoworkervi]]cetoworker.jpg]]}}{{ref_image ser[[File:0691_servicetoworker2vi]]cetoworker2.jpg]]}}
====Dispatcher View====
=====文脈=====
システムは実行のフローと表示処理に対するアクセスを制御し、表示処理では動的コンテンツの生成に関する責務を持つ
=====問題点=====
アクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネスロジックと、整形用ロジックが、ビューに入り混じっているアクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネス[[ロジック]]と、整形用[[ロジック]]が、ビューに入り混じっている
=====解決策=====
コントローラとディスパッチャをビューやヘルパーと組み合わせて、クライアントからのリクエストを処理する。
さらにネットワークパフォーマンスに悪影響
=====解決策=====
Business Delegateを利用して、プレゼンテーション層のクライアントとビジネスサービスの結合度を低くする。Business Delegateは、EJBアーキテクチャの詳細や、ビジネスサービスの実装の詳細を隠蔽するDelegateは、[[EJB]]アーキテクチャの詳細や、ビジネスサービスの実装の詳細を隠蔽する
[[File:0676_businessdelegate.jpg]]
====Value Object====
====Session Facade====
=====文脈=====
エンタープライズBeanは、ビジネスロジックとビジネスデータをカプセル化し、インターフェースを公開する。分散サービスの複雑な部分が見えてしまうエンタープライズBeanは、ビジネス[[ロジック]]とビジネスデータをカプセル化し、インターフェースを公開する。分散サービスの複雑な部分が見えてしまう
=====問題=====
*結合度が高くなり、クライアントとビジネスオブジェクトとの間に直接の依存関係が発生
エンティティBeanはオブジェクトモデル内の個々の永続オブジェクトを表現するためのものではなく、より粗粒度の永続ビジネスオブジェクトを表現するのに適している
=====問題=====
J2EEアプリケーションでは、クライアントはリモートインターフェースを通してエンティティBeanにアクセスする。エンティティBeanのオブジェクトの粒度が細かい場合、エンティティBeanのメソッド呼び出しが多くなり、ネットワークのオーバーヘッドが増大[[J2EE]]アプリケーションでは、クライアントはリモートインターフェースを通してエンティティBeanにアクセスする。エンティティBeanのオブジェクトの粒度が細かい場合、エンティティBeanのメソッド呼び出しが多くなり、ネットワークのオーバーヘッドが増大
=====解決策=====
互いに関係する一連の永続オブジェクトを、個々の細粒度のエンティティBeanとして渡すのではなく、Composite Entityを使ってモデル化して管理する。
アプリケーションクライアントはしばしば、セッションBeanやエンティティBean、DAO等、複数のオブジェクトから構成されたデータにアクセスしなければならない
=====問題=====
アプリケーションクライアントは大抵モデルのデータを使用する必要があり、モデルはツリーやグラフとしてまとめられたオブジェクトの集合として表されることがある。J2EEアプリケーションでは、セッションBeanやエンティティBean、DAO等から構成されるが、クライアントがモデルデータを取得するためには、モデルを定義する個々の分散オブジェクトにアクセスする必要がある。アプリケーションクライアントは大抵モデルのデータを使用する必要があり、モデルはツリーやグラフとしてまとめられたオブジェクトの集合として表されることがある。[[J2EE]]アプリケーションでは、セッションBeanやエンティティBean、DAO等から構成されるが、クライアントがモデルデータを取得するためには、モデルを定義する個々の分散オブジェクトにアクセスする必要がある。
=====解決策=====
Value Object Assembler を使って、必要となるモデルやサブモデルを構築する。Value Object Assemblerは、モデルを定義する各種オブジェクトから、バリューオブジェクトを使ってデータを取り出す
表示用のサービスに対してクライアントが項目のリストを要求するが、項目数は不明でああり、かなり大きくなる可能性がある
=====問題=====
検索結果がかなり大きくなる場合がある。クライアントは通常結果リストを表示するために結果を使用するが、参照するのは、最初の2、3レコードだけであったり、すぐに結果に対してトランザクションを実行しないこともよくある。検索結果がかなり大きくなる場合がある。クライアントは通常結果リストを表示するために結果を使用するが、参照するのは、最初の2、3レコードだけであったり、すぐに結果に対して[[トランザクション]]を実行しないこともよくある。
リモートオブジェクトの集合を返す、ejbFind()メソッドを呼び出し、各エンティティBeanに対して値のリストを取得するという方法は、ネットワーク負荷が高く悪い方法と考えられている
=====解決策=====
Value List Handlerは、必要な問い合わせを実行できるDAOに直接アクセスする。
[[File:0693_valuelisthandler.jpg]]
====Service Ser[[vi]]ce Locator====
=====文脈=====
サービスを検索し生成するために、複雑なインターフェースやネットワーク操作が必要
=====問題=====
J2EEクライアントは、EJBやJMSといったサービスコンポーネントと相互作用するために、検索操作を行うか、新しいコンポーネントを生成しなければならない。[[J2EE]]クライアントは、EJBやJMSといったサービスコンポーネントと相互作用するために、検索操作を行うか、新しいコンポーネントを生成しなければならない。J2EEクライアントはすべてJNDIの共通機能を使ってコンポーネントの検索や生成を行い、その検索処理はクライアントに共通であるため、多種多様なクライアントにそのコードが散在してしまい、不必要に重複してしまう[[J2EE]]クライアントはすべてJNDIの共通機能を使ってコンポーネントの検索や生成を行い、その検索処理はクライアントに共通であるため、多種多様なクライアントにそのコードが散在してしまい、不必要に重複してしまう
=====解決策=====
Service Ser[[vi]]ce Locatorオブジェクトを使って、JNDIを使用する部分をすべて抽象化し、複雑な処理を隠蔽する。複数のクライアントが、オブジェクトを再利用できるため、コードの複雑さを緩和し、唯一の制御点を提供し、パフォーマンスを改善できる{{ref_image ser[[File:0688_servicelocatorvi]]celocator.jpg]]}}{{ref_image ser[[File:0689_servicelocator2vi]]celocator2.jpg]]}}====Data [[Access ]] Object====
=====文脈=====
データに対するアクセス方法はデータソースによって異なる。
=====問題=====
J2EEアプリケーションの多くはどこかで永続データを使用する必要があるが、永続ストレージは異なるメカニズムで実装されているため、APIに顕著な差がある。[[J2EE]]アプリケーションの多くはどこかで永続データを使用する必要があるが、永続ストレージは異なるメカニズムで実装されているため、APIに顕著な差がある。
=====解決策=====
Data [[Access ]] Object を使ってデータソースに対するすべてのアクセスを抽象化し、カプセル化する。DAOはデータを取得し更新するために必要なデータソースとの接続を管理する
[[File:0680_dataaccessobject.jpg]]
[[File:0681_dataaccessobject2.jpg]]
===Service Ser[[vi]]ce Activator===
=====文脈=====
エンタープライズBeanと他のビジネスサービスを、非同期に活性化する方法が必要
エンタープライズBeanへのアクセス時、検索やリモートメソッド呼び出しなどのメソッド呼び出しは、すべて同期的に行われる。すなわちクライアントはメソッドから結果が返ってくるのを待たねばならない
=====解決策=====
Service Activatorを使ってクライアントからの非同期のリクエストやメッセージを受け取る。Service Ser[[vi]]ce Activatorを使ってクライアントからの非同期のリクエストやメッセージを受け取る。Ser[[vi]]ce Activatorはメッセージを受け取ると、ビジネスサービスやコンポーネントを検索、メソッドを呼び出し、非同期でリクエストを処理{{ref_image ser[[File:0686_serviceactivatorvi]]ceactivator.jpg]]}}{{ref_image ser[[File:0687_serviceactivator2vi]]ceactivator2.jpg]]}}

案内メニュー