「サーバーサイドJavaがはじめての人向け」の本でもなく、「J2EE技術をフルに使って複雑なアプリケーションを開発する人向け」の本でもありません。本書は、その中間「『はじめてのJSP&サーブレット』は読んだけど、次に何を読めば上達するの?」という人向けになっています。
当然、サーブレット・JSPとは?という初歩的なことは書いてありません。逆に、J2EEシステムの設計技法やアンチパターンについても書いてありません。本書に載っているのは、オーソドックスなJ2EEアプリケーションのアーキテクチャを適用した場合の開発ケースです。
企業プログラマーとしてデビューしたけど、本格的なJ2EEアプリケーションは初めてと言う人向けの書籍になっています。内容的にも、無難なところで収まっていると言う感じです。濃すぎず、薄すぎずと言ったところです。
J2EEアプリケーション開発者としてデビューした時は、「アーキテクチャ」なんて言葉を始めて聞いたし、「UML」なんて言葉は知りませんでした。DAO(Data Access Object)パターンやMVC(Model View Controller)パターンなんてのも、イメージすらわきませんでした。本書では、実際の開発プロセスを流れにそって進めているので、開発というものの雰囲気をとてもよくつかめるようになっています。
特徴
「UMLを使ってRUPを使って開発をします。」と言われてピンと来ないJ2EE開発者は本書が開発の全体像を照らす指針になってくれると思います。
バウンダリ・コントロール・エンティティ(BCE)と分けてWebアプリケーションを設計する「ロバストネス分析」という方法を本書では解説しています。バウンダリでは「FrontControllerパターン」を、コントローラでは、「Commandパターン」を、エンティティでは「DAOパターン」を使って実装する方法が載っています。プロジェクト全体では、テスティングに関して「JUnitやCactusやMock Object」を使う方法が解説されています。リファクタリングの方法やAntを使った自動デプロイ、応用アーキテクチャの説明と、実際のJ2EEアプリケーション開発(サーブレット・JSPを使った場合)を意識されています。
ケーススタディには、レコードショップのサンプルが使われています。検索・登録・更新・削除を盛り込んだ、実践的なものだと思います。
読み進めるためには、多少の予備知識(UMLの知識、サーブレット/JSPの知識)が必要となりますが、初心者にもおすすめできる内容です。「サーバーサイドの歩き方ガイドブック」の名に恥じない出来だと思います。新人研修等の参考におすすめです。
覚書き
Commandパターン
コマンドは、ユースケースにつき1クラスを定義します。コマンドクラスとユースケースを一対一で対応させることで、シンプルで理解しやすい設計になります。
コマンドクラスは、executeメソッドを持つ Commandインターフェースを実装します。ユースケースの処理は、コマンドクラスのexecuteメソッドに書くことにします。
DAOパターン
DAOは1エンティティにつき1つのDAOを対応させて定義します。状態を保持せず、追加(Create)、検索(Refer)、更新(Update)、削除(Delete)のメソッドのみを持ちます(CRUDメソッドと呼びます)。
エンティティオブジェクトとは、ユースケースで使用するデータベースのレコードと同じデータ構造を持つクラスです。ただし、1テーブル=1エンティティとは限りません。ユースケースの視点からエンティティを捉えるので、テーブルを結合したデータであっても1エンティティと捕らえることもあります。
応用アーキテクチャ
FrontControllerパターンと呼ばれる、一つのメインサーブレットがすべてのリクエストを受け取り、個別のコマンドクラスに処理を委譲するパターンがあります(詳しくは、『実践J2EE』を見るとよく分かります)。最近のフレームワークではほとんどこのパターンが使われています。
メインサーブレットと個別のコマンドクラス(コントローラクラス)は、外部XMLでマッピングされるのが多いです。
例外処理に関しては、メインサーブレットで例外処理を行います。それぞれの層(レイヤー)で送出された例外を元に処理を切り分けます。こうすることで、例外処理がコマンドクラスやDAOクラスに散らばらずに管理できます。層ごとに送出する例外クラスを定義するのが普通です。
参考
- サーブレット/JSPの仕組みを理解するならこれから。
- 実際のJ2EE開発に慣れてきたらさらに踏み込むために本書を。
- J2EE パターンを学ぶならイチオシ。