|
ページ一覧
|
ブログ
|
twitter
|
書式
|
書式(表)
|
MyMemoWiki
差分
ナビゲーションに移動
検索に移動
← 古い編集
J2EEパターン
(ソースを閲覧)
2020年2月16日 (日) 04:27時点における版
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_viewhelper
vi]]ewhelper
.jpg
]]
}}
{{ref_image
[[
File:0697_viewhelper2
vi]]ewhelper2
.jpg
]]
}}
====Composite View====
=====文脈=====
=====解決策=====
複数の原子的なサブビューから構成された複合ビューを使用する。テンプレートの各コンポーネントは全体ビューの中に動的に組み込まれ、ページレイアウトはコンテンツとは別に管理できる
{{ref_image composite
[[
File:0678_compositeview
vi]]ew
.jpg
]]
}}
{{ref_image composite
[[
File:0679_compositeview2
vi]]ew2
.jpg
]]
}}
====
Service
Ser[[vi]]ce
to Worker====
=====文脈=====
システムは実行のフローとビジネスデータに対するアクセスを制御し、ビジネスデータから表示用のコンテンツを作成する
=====問題点=====
アクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネスロジックと、整形用ロジックが、ビューに入り混じっている
アクセス制御やコンテンツの検索の管理、ビューの管理を集中して行うコンポーネントが存在せず、制御コードがビューに複製されている。ビジネス[[ロジック]]と、整形用[[ロジック]]が、ビューに入り混じっている
=====解決策=====
コントローラとディスパッチャをビューやヘルパーと組み合わせて、クライアントからのリクエストを処理する。
Service to Workerでは、ディスパッチャコンポーネントを利用した、Front ControllerパターンとView
Helperパターンの組み合わせを記述する
[[Help]]erパターンの組み合わせを記述する
*コントローラはコンテンツの検索をヘルパーに委譲
*ヘルパーはビュー用の中間的なモデル生成を管理
*ディスパッチャは、ビューの管理とナビゲーションの責務をもつ
{{ref_image ser
[[
File:0690_servicetoworker
vi]]cetoworker
.jpg
]]
}}
{{ref_image ser
[[
File:0691_servicetoworker2
vi]]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_servicelocator
vi]]celocator
.jpg
]]
}}
{{ref_image ser
[[
File:0689_servicelocator2
vi]]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_serviceactivator
vi]]ceactivator
.jpg
]]
}}
{{ref_image ser
[[
File:0687_serviceactivator2
vi]]ceactivator2
.jpg
]]
}}
Piroto
ビューロクラット
、
インターフェース管理者
、
管理者
12,504
回編集
Tweets by pppiroto
Follow @pppiroto
© 2006 矢木浩人
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWikiについてのヘルプ
カテゴリ
ツール
特別ページ
印刷用バージョン
プログラミング 言語
まとめ
ActionScript
C
C#
C++
COBOL
Dart
Electron
Flutter
Windows
ASP.NET
ASP.NET Core
C#
Silverlight
VC++ .NET
WPF
Universal Windows Platform
.NET Core
Xamarin
Groovy
Java
Java SE
Java EE
Spring Boot
Eclipse
JavaScript
jQuery
Angular
AngularJS
React
Vue
Jython
Kotlin
Lisp
Objective-C
PL/I
Perl
PHP
Python
まとめ
標準ライブラリ
ライブラリ
Django
Flask
Python3
Powershell
R
Racket
Ruby
Scala
SQL
Scheme
Swift
SwiftUI
TypeScript
UML
VB6
VBA
VBScript
VC++
VC++ .NET
WScript
XML
正規表現
コマンド|スクリプト(Win)|コマンド
スクリプト(シェル)
Web
Apache
IHS
WAS
GlassFish
JBoss
WildFly
Node.js
CSS
CSS3
Bootstrap
HTML
HTTP
Markdown
OS/環境
Android
Linux
Linux LPIC
CentOS
CentOS7
Fedora
Ubuntu
Mint
Mac
UNIX
Windows
Windows Mobile
Windows Phone
iOS
Kindle
Hinemos
Raspberry Pi
データベース
全般
IDEF1X
ER図
DFD
SQL
Database|データベース製品
Access
Apache Derby
DB2
MySQL
Oracle
PostgreSQL
SQL Server
sqlite
MongoDB
アーキテクチャ・モデリング・パターン
DFD
ER図
J2EEパターン
UML
アルゴリズム
デザインパターン|GOF デザインパターン|デザインパターン
リファクタリング
レスポンシブWebデザイン
Clean Architecture
環境
Android Studio
Cygwin
Eclipse
IE
Visual Studio
Visual Studio Code
vi
Windows Live Writer
Maven
YEOMAN
Bower
Gradle
Unity
Xcode
Webサービス
Amazon Web Service
Firebase
Google App Engine
Google App Engine(Java)
Google App Engine(.NET)
Google Cloud Platform
Twitter
mixi アプリ
プロジェクトマネージメント
プロジェクトマネージャ
システムアーキテクト
ITストラテジスト
PMBOK
BABOK
システム開発
ファンクションポイント
OpenProj
ProjectLibre
Open Workbench
仮想化
Docker
Hyper-V
Kubernetes
VirtualBox
Xen
Network
DNS
TCP/IP
ロードバランサー
Office
Access
Excel
Microsoft Project
Outlook
PowerPoint
Visio
Word
CMS
FreeStyle Wiki|FSWiki|FreeStyle Wiki
MediaWiki
Movable Type
WordPress
構成管理
Git
subversion
Vagrant
Maven
ツール
Hashids
文章
接続詞
音楽
作詞作曲
教養
論理学
数学
行列プログラマー
統計
自然言語処理
デザイン
Inkscape
GIMP
業務
購買業務
設備保全
生産管理
トヨタ生産方式
部品表
統合化部品表
物流
DX
在庫管理
その他
PC
OSS
Tips
Webサービス
英語
リンク
本の紹介
引用文
LIFE HACK
アイディア
コミュニケーション
Music Bee
Cakewalk