SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Enterprise Javaアプリケーションのアーキテクチャとデザイン
Java EEアプリケーション開発の基礎

Java EEアプリケーションデザイン

 これまでの説明で、Java EEアプリケーションデザインの詳細に踏み込むための基礎はできました。とはいえ、Java EEソフトウェアのデザインはそれ自体で大きな題材であり、多くの書物で取り上げられてきたことです。この記事でのねらいは、Spring Frameworkを使ってパターンとベストプラクティスを適用することにより、Java EEアプリケーションのデザインと開発を単純化することにあります。従って以下では、このテーマに沿いつつ簡潔さも考慮して、このコンテキストに関係するトピックだけを論じることにします。

 開発者やデザイナの中には、Java EEアプリケーションデザインは本質的にオブジェクト指向デザインだと考えている人たちもいます。それは間違いではないのですが、Java EEアプリケーションデザインには従来のオブジェクトデザインよりもずっと多くのことが関係してきます。問題範囲のオブジェクトを見つけ、それらの関係と協働を把握する必要があります。個々のレイヤのオブジェクトには役割が割り当てられ、レイヤ間の対話のためにインターフェースが用意されます。しかし、それで終わりではありません。話はもっと複雑です。なぜなら、従来のオブジェクトデザインと違って、Java EEは分散オブジェクトテクノロジ(ビジネスコンポーネントを配備するためのEJBなど)をサポートしているからです。ビジネスコンポーネントはリモートアクセスが可能なセッションEnterprise JavaBeansとして開発されます。JMSとメッセージ駆動型Bean(MDB)はオブジェクトの分散非同期対話を可能にするので、話はいっそう複雑になります。

 分散オブジェクトのデザインは、経験豊富なプロにとってさえ非常に複雑で厄介な仕事です。最終的なソリューションの草案を作る前に、スケーラビリティ、パフォーマンス、トランザクションといった重要な問題について検討する必要があります。使用するセッションEJBファサードの粒度を粗くするか細かくするかというデザイン上の決定は、Java EEアプリケーションの全体的なパフォーマンスに大きな影響を及ぼす可能性があります。またトランザクションに課する正しいメソッドの選択はデータ整合性に大きな影響を及ぼす可能性があります。

パターンによるアプリケーションデザインの単純化

 Java EEのデザインパターンを適用すると、アプリケーションデザインを大幅に単純化できます。Java EEのデザインパターンについてはSunのJava BluePrintsでドキュメント化され、『Core J2EE Design Pattern』(Prentice Hall刊、2003年)でも詳細に論じられています。Java EEデザインパターンは『Design Patterns: Elements of Reusable Object-Oriented Software』(Addison Wesley刊、1994年)で説明されている基本オブジェクトデザインパターンを基礎にしています。これらのパターンは、同書が4人の著者(Eric Gamma、Richard Helm、Ralph Johnson、John Vlissides)によって書かれたところから、GOF(Gang of Four)パターンとも呼ばれています。Java EEパターンカタログではコアオブジェクトデザイン原則に加え、リモートアクセスが可能な分散オブジェクトの難題に対処するための方策も考慮しています。

 デザインパターンは一般的なデザイン上の問題に再利用できるソリューションを記述したものです。デザインパターンは経験豊富な開発者とデザイナによって蓄積されドキュメント化されたテスト済みのガイドラインとベストプラクティスです。それぞれのパターンには次に示す3つの主要な特性があります。

  • 「コンテキスト」―問題が存在する周囲条件です。
  • 「問題」―その範囲における困難で不明確な対象領域です。検討すべきコンテキストによって限定されます。
  • 「ソリューション」―検討している問題に対する改善策です。

 ただし、問題に対するすべてのソリューションでその問題がパターンと見なされるわけではありません。問題がパターンと見なされて、再利用できるソリューションが生み出されるためには、その問題が頻繁に発生するものであることが必要です。さらに、パターンにおいてデザインソリューションを開発者とデザイナに知らせるための共通語彙を確立することも必要です。例えば、誰かがGOFのSingletonパターンに言及した場合、アプリケーション内でインスタンスを1つしか持たないオブジェクトをデザインする必要があるのだということを関係者全員が理解できることが必要です。多くの場合、このデザインパターンを実現するために、その記述に構造図と相互作用図ならびにコードが補足されます。各パターンの記述は一般に利点と問題点の分析で締めくくられます。

Java EEデザインパターンカタログ

 既に述べたように、Java EEは10年近くにわたって最も優勢なエンタープライズ開発プラットフォームでした。その間、このテクノロジを使って構築され成功したアプリケーションと製品は何千もあります。しかし、失敗した試みもあります。失敗の原因はいくつかありますが、その中で真っ先に挙げられるのが不適切なデザインとアーキテクチャです。これが重大な領域であるのは、デザインとアーキテクチャは要件を構築フェーズに橋渡しするものだからです。けれども、Java EEのデザイナとアーキテクトは有用なデザインパターンのリストを作成することで失敗と成功の両方から教訓を学んできました。このJava EEパターンカタログは、Java EEアプリケーションの各レイヤのオブジェクト対話のために時の試練を経たソリューションのガイドラインとベストプラクティスを提供します。

 プラットフォームそのものと同様、Java EEパターンカタログも進化してきました。既に述べたように、このカタログは初めSunのJava BluePrintsの一部としてまとめられ、後に『Core J2EE Design Pattern』(Prentice Hall刊、2003年)で詳細に論じられました。表1にこれらのパターンを示し、それぞれの簡単な説明と対応するレイヤを付記します。

表1:Java EEパターン
レイヤ パターン名 説明
プレゼンテーション View Helper プレゼンテーションをビジネスロジックから分離する
Composite View レイアウトベースのビューを複数の小さなサブビューから作成する
Front Controller プレゼンテーション層のリソースに対する単一のアクセスポイントを提供する
Application Controller ページコントローラおよびビューコンポーネントとの調整を担うフロントコントローラヘルパとして機能する
Service to Worker 次のビューに制御が渡される前にビジネスロジックを実行する
Dispatcher View 次のビューへの応答を準備するために最小限のビジネスロジックを実行する(またはビジネスロジックをまったく実行しない)
Page Controller ページ上での各ユーザーアクションを管理し、ビジネスロジックを実行する
Intercepting filters ユーザー要求に対して前処理と後処理を行う
Context Object アプリケーションコントローラを特定のプロトコルへの結合から切り離す
ビジネス Business Delegate 複雑なリモート分散オブジェクトになる可能性のあるビジネスロジックとページコントローラを切り離すためのブリッジとして機能する
Service Locator ビジネスオブジェクトへのハンドルを提供する
Session Facade リモートクライアントのためにビジネスレイヤへの入口として粒度の粗いインターフェイスを公開する
Application Service ビジネスロジックの実装を単純なJavaオブジェクトとして提供する
Business Interface ビジネスメソッドを集約し、EJBメソッドのコンパイル時チェックを適用する
統合 Data Access Object データアクセスロジックをビジネスロジックから分離する
Procedure Access Object データベースのストアドプロシージャと関数へのアクセスをカプセル化する
Service Activator(Message Facade) 要求を非同期に処理する
Web Service Broker Webサービス標準として公開された外部アプリケーションにアクセスするためのロジックをカプセル化する

 表1はJava EEの現在の状態に合わせて少し修正してあります。例えば、Data Transfer Objectパターンはもうカタログに含まれていないので、この表から抹消しました。このパターンはレイヤ間でデータを転送するのに使われていたもので、リモートエンティティBean持続性コンポーネントを使用する場合に特に便利でした。しかし、新しいJava Persistence API(Java EE 5プラットフォームの一部)が導入され、POJO(Plain Old Java Object)プログラミングモデルが大勢になったことで、このパターンはもはや意義を失っています。

 この表は決して完全なものではありません。パターンの中には、いろいろな層に適用できるものがあります。例えば、セキュリティデザインパターンをプレゼンテーションレイヤに適用すれば、JSPなどのWebリソースへのアクセスを制限できます。またセキュリティパターンを使用して、ビジネスレイヤのEJBコンポーネントに関してメソッド呼び出しを制御することもできます。トランザクションパターンはビジネスレイヤと統合レイヤの両方に適用できます。これらのパターンは「横断的(cross-cutting)」パターンに分類されます。

次のページ
UMLを使用したJava EEアーキテクチャ/デザイン

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Dhrubojyoti Kayal(Dhrubojyoti Kayal)

Capgemini Consultingに勤務する上級コンサルタント。Enterprise Javaテクノロジを利用したアプリケーションや製品の開発およびデザインにおいて5年以上のキャリアを持つ。Spring Framework、ORM、SOA、リファクタリング、プレファクタリング、パフォーマンスエ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3839 2009/04/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー