フレームワークのことはじめ

一言でフレームと言っても、色々な種類があり、機能の違いやフレームワークへ望む効果も プロジェクト・人によってまちまちだと思います。
特にプロジェクトにてフレームワークを採用する際の主な視点には以下の3つが上げられます。

「技術的機能」に焦点をあてた情報は最近多くなってきましたが、まだまだ「ビジネスシーンへの適合」
「開発管理の容易性」について評価するような情報は少ないようです。
ここでは上記の点に力をそそいだ情報の収集を目的としています。

オープンソースMVCフレームワーク

なかなか情報源として商用フレームワークを取り上げることは難しいので、まずはオープンソースの フレームワークを見て、その特徴を整理してみます。
近年、Web開発者の間でMVCモデル、フレームワークという言葉は説明する必要がないくらいに頻繁に 耳にします。これに関する説明は、

@IThttp://www.atmarkit.co.jp/fjava/#0
「基礎から学ぶサーブレット/JSP」
「Strtusを使うWebアプリケーション構築術」

を参照してください。
ここでは代表的なオープンソースフレームワークを紹介し、様々な角度から比較してみます。

Jakaruta Struts Framework

MVC構造のフレームワークとして最も有名なのがjakarutaプロジェクトのStrutsです。
Strutsは簡単に説明すると、下記の3つのクラスと定義ファイルから構成されています。

  • アクションサーブレット(ActionServlet)
  • アクションフォームビーン(ActionFormBean)
  • アクションクラス(Action)

「アクションサーブレット」は「コンフィグレーションファイル(struts-config.xml)」に書き込まれた 「アクションフォーム」・「アクションクラス」、「JSP」の紐付け、読み込み、実行を制御します。
「アクションフォームビーン」は画面から送られたリクエスト情報を受け取り、保持する役割を果たします。
「アクションクラス」はアクションフォームに格納したリクエストパラメータを基に、 実際のビジネスロジックを実行します。
データクラス、ビジネスロジッククラス、画面JSPの定義・制御をコンフィグレーションファイルに記述することで MVCモデルを明確に切り分けていると言えます。
上記の流れと構造を図にしています。見てわかるように綺麗な構造となっています。
Strutsの構造

Spring Framework

(1)概要

Springは各種リソースをシンプルなJavaBeansとして扱い、オブジェクト間の依存解消のためにIoCを採用した軽量コンテナ (Lightweight Container)を核としたフレームワークです。

従来のコンテナによる開発では、フレームワークのAPIを利用してコードを記述するため、コンテナに強く依存してしまいます。
そのため、テストを実施する際にコンテナに合わせた設定などが必要になり、容易にテストができないということになります。
Springでは、開発者はフレームワークに依存しない通常のJavaBeansでコードを記述する為、特別なAPIの知識も必要がなく、
ロジックのテストもコンテナを利用することなく容易に行えます。

Springには多くの機能が備わっており、上記で説明した核となる部分のコアパッケージ以外に6つのパッケージが存在します。
それらのSpringでサポートするライブラリや、独自実装したJavaBeansの設定情報をSpringによって一元管理できると いうことも大きな特徴だと言えます。

キーワード

  • コンテナに依存しない ⇒ テストが容易
  • 他のFWとの接続が容易 ⇒ 拡張性が高い
  • 設定情報を一元管理 ⇒ 生産性向上の標準化がし易い

(2)構造

概要でも説明しましたがSpringは7つのパッケージで構成されています。
以下に簡単に説明をします。

1) Spring Core
Springで最も基本を成す部分であり、ビーンコンテナ機能を管理できるようにする依存性注入(Dependency Injection)機能を提供します。
考え方はBeanFactoryで、コードより定義部分と依存性の使用を切り離せるようにしたファクトリパターン(※デザインパターン参照)にて提供しています。
2) Spring Context
JNDIレジストリに似ているフレームワークスタイルのやり方でビーンにアクセスする方法を提供します。
3) Spring DAO
JDBC抽象化レイヤを提供します。
4) Spring ORM
一般的なオブジェクト-リレーショナルマッピング(O-Rマッピング)APIのレイヤを統合します。
5) Spring AOP
AOPアライアンスと互換性のあるアスペクト指向プログラミング実装を提供します。
6) Spring Web
マルチパート機能やサーブレットリスナを使ったコンテキストの初期化や、Web指向なアプリケーションコンテキストの ような基本的なWeb指向の統合機能を提供します。
7) Spring Web MVC
Webアプリケーション向けモデル、ビュー、コントローラの実装を提供します。
SpringのControllerは全てのリクエストが単一のインスタンス上で実行されるマルチスレッドのオブジェクトであることからStrutsのアクションクラスに類似しています。しかし、Strutsと異なる点はSpringMVCは全てインターフェースベースになっており、他のオブジェクト同様、IoC使用して設定できることにあります。
図.Spring Frameworkのパッケージ構造 SpringFW構造

WebWork2 Framework

(1)概要

WebWork2はHMVC(階層型MVC)モデルと呼ばれるフレームワークを提供し、サーブレット以外のSwingベースの アプリケーションもMVCモデルで開発できるOpenSymphonyによって開発されているWebアプリケーションフレームワークです。
WebWork2では簡単・手軽にコンポーネント化を実現するために、

「インターセプタ」
「パッケージカスタムUIコンポーネント」
JSPやVelocityに使用できる独自のカスタムタグなど
「IoCコンテナ」
協調して動作するコンポーネント間の依存性を緩くし、再利用性を高める。
Inversion of Controlはデザインパターンの一種で最近はDI(Dependency Injection)と呼ばれるようになっています。
「パッケージング」

などの機能で実現しています。
また、「コマンドパターンフレームワーク」(※デザインパターン参照)を担当する部分がXWorkという別プロジェクトに 分離されており、Webに依存する部分とそれ以外との切り分けが明確になっています。そのため、アクションクラスが ServletAPIに依存しないということで、ユニットテストが簡単にできます。

(2)構造

1) ビューからサーブレットディスパッチャが全てのアクションに対するリクエストを受け取ります。
2) ディスパッチャはURIとxwork.xml(設定ファイル)に記述されているアクション定義情報を元に実行するアクションクラスを決定します。
3) アクションの実行前にxwork.xmlに記述されているインターセプタが実行されます。インターセプタとはフィルタ処理のようなものでパラメータの設定や入力チェック、ロギングなどの処理を行います。
4) インターセプタを独自に定義したり、アクションの実行後に実行を定義したり、アクションごとに自由に定義できるところが大きな特徴です。
図.WebWork2の動作原理
Webwork2構造