ICONIXプロセスという手法を扱っており、DDD本の次に読む本としてもオススメだと思います。
ただ日本語版の初版が2007年発行(原著はもっと前!)なので、この書籍で扱っているプログラム題材「インターネット書店」を動作させるための環境構築にチョト苦労した・・・
10年以上前と今では、Spring FrameworkやTomcat、その他諸々のOSSのバージョンの差異がかなりデカいのよね。
せっかくなので、環境構築の手順について纏めておくことにする。Javaを普段使ってない読者向け。
ちなみに、ここで紹介する方法が正解というわけではないので注意!
とりあえず動作させるためにやってみた一例です。
環境
makopi23のPC環境は以下の通り。IDEはEclipseとTomcatが両方入ってる「Pleiades All in One」を使っている。
- Windows 7 (64ビット)
- Eclipse 4.5 Mars (Pleiades All in One)
- JDK (HSQLDB起動時に必要。JDK 8でも大丈夫みたい)
ソースコードの入手
makopi23が環境構築したプロジェクトを以下のGitHubにアップロードしたので、 C:\Dev フォルダにcloneすべし。
https://github.com/makopi23/InternetBookstore

以下、C:\Dev フォルダにcloneしたことを前提に説明するが、clone先は他のフォルダでも構わない。
ただしその場合は、InternetBookstore\war\WEB-INF\bookstore-servlet.xml の15行目あたりのパスを修正すること。
ちなみに原著のソースコードは以下からDL出来る模様。(2017年3月現在)
https://iconixprocess.wordpress.com/downloads/internet-bookstore/
ライブラリの入手
Spring Frameworkは 2.0.5 を、HSQLDBは1.7.3 を既に入手してある。(2007年当時はこのくらいのバージョンだったらしい)
両者のjarファイルは C:\Dev\InternetBookstore\war\WEB-INF\lib にmakopi23が入れておいた。
その他必要となるライブラリのjarもmakopi23が入手して上記フォルダに入れてあるので、新たに入手する必要は無い。
Eclipseの環境構築
cloneしたInternetBookstoreの直下には .project ファイルを置いているので、Eclipseにそのままインポートできる。
Eclipseのメニューから[ファイル]-[インポート]-[既存プロジェクトをワークスペースへ]と選択し、インポートすべし。
Eclipseのパースペクティブは「Java EE」を選択しておく。

JDKのバージョンは 1.6 にとりあえずしておく。

次に、Tomcatの準備をする。
「サーバー」タブを選択し、「新規サーバを作成してください」的なリンクをクリックする。

Tomcatのバージョンを選択する画面では、「Tomcat 6」をとりあえず選択しておく。
(2007年当時はこのくらいのバージョンだったはず)

これでEclipseの準備はOK。
デプロイ
プログラム題材「インターネット書店」をTomcatにデプロイする。
「InternetBookstore」を右クリック → 実行 → サーバーで実行

使用するサーバーの選択画面が出るので、Tomcat 6 になっていることを確認し、完了ボタンを押す。
すると、Eclipseの内蔵ブラウザが起動して、「インターネット書店」のトップページが表示される。

「インターネット書店」の動作確認
トップページのURLは http://localhost:8080/InternetBookstore/

ハリー・ポッターの書籍が7冊表示されているので、一番上の1冊目のリンクをクリックする。
すると、ユースケース「書籍詳細を表示する」のページに遷移する。
URLは http://localhost:8080/InternetBookstore/bookdetails.htm?id=101

「Write a review of this book」のリンクをクリックすると、ユースケース「顧客レビューを書く」のページへ遷移する。
URLは http://localhost:8080/InternetBookstore/writecustomerreview.htm?bookid=101

Title、Your Review、Ratingの3つを入力し、「Save Review」ボタンをクリックすると、Thanksページへ遷移する。
URLは http://localhost:8080/InternetBookstore/writecustomerreview.htm

「Continue shopping」のリンクをクリックするとトップページへ戻る。
データベース
投稿した書籍レビューの文章がデータベースにちゃんと入ってるか確認してみる。
まず、アプリケーション実行中はTomcat 6がHSQLDBのファイルにロックをかけているようなので、Tomcat 6を停止する必要がある。
Eclipseの「サーバー」タブに赤四角の停止ボタンがあるので、それを押せばTomcatが停止する。
次にHSQLDBを起動する。
コマンドプロンプトで C:\Dev\InternetBookstore\db に移動し、以下のコマンドを実行する。
java -cp ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server

次に、コマンドプロンプトを別ウィンドウでもう1つ起動し、C:\Dev\InternetBookstore\db に移動し以下のコマンドを実行する。
java -cp ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.util.DatabaseManager

DB接続画面のGUIが起動するので、Type欄を「HSQL Database Engine Server」を選択してOKボタンを押す。

「HSQL DataBase Manager」のGUIが起動するので、ここからSQLを実行できる。
さきほど投稿した書籍レビューが CustomerReviews テーブルに入っているか、Select文を実行してみる。
select * from CustomerReviews;
すると、SQL実行結果が表示される。さきほど投稿した結果が最終行(ID=6)に表示されている。

まとめ
10年以上前のアプリを1から環境構築するのはけっこう骨が折れますね・・・
原著のソースコード公開先を見つけるだけでも一苦労でした。(公式サイトのソースコードDL先とかリンク切れしてるし)
ちなみに冒頭で「DDD本を読んだ人が、次に読む本としてもオススメ」と書いたDDD本はこちら。
エリック・エヴァンスのドメイン駆動設計
posted with amazlet at 17.03.11
翔泳社 (2013-11-20)
売り上げランキング: 6,998
売り上げランキング: 6,998
DDD界隈で著名な増田さん、かとじゅんさんも「ユースケース駆動開発実践ガイド」をオススメしている模様。
@masuda220 とりあえずICONIX本が先に手に入ったので読んでるけど、増田さんのおっしゃるとおりEric本と似た空気を感じますね。名詞だと思っていたが動詞じゃないの?みたいな分析とか素晴らしい。こういう分析が貧血症を防ぐことになるんじゃないかと思いました。よい本ですね。
— かとじゅん (@j5ik2o) 2016年11月5日
「ユースケース駆動開発実践ガイド」の読書会も開催されているので、この機会に是非参加して一緒に読んでみませんか~
コデアル読書会 - ユースケース駆動開発実践ガイド
https://codeal.connpass.com/
(私もこの読書会がキッカケで読み始めました)
おまけ
ダウンロードしてきた原著のソースコードは、そのままだといくつか動作しない箇所があった。
そのため、makopi23が以下の修正を独自に入れてるので注意が必要。
■修正点
(1)
InternetBookstore\war\META-INF\context.xml を削除
(2)
bookstore-servlet.xml の50行目あたり
BookstoreValidatorをコメントアウトし、CustomerReviewValidatorを追加
(3)
/InternetBookstore/src/com/iconixsw/bookstore/domain/logic/CustomerReviewValidator.java を追加
(4)
INSERT INTO Books (id, title, synopsis)
VALUES
(107, 'Harry Potter and the As-yet Unreleased Novel',
'Harry continues his adventures and ...'
);
(5)
INSERT INTO Customers (id, firstName, lastName, email, password)
values (1, 'Billy Bob', 'Red', 'billybob@abc.xyz', 'password');
(6)
customerreviewaccepted.jsp
【誤】<p><a href="home.jsp">Continue shopping</a></p>
【正】<p><a href="home.htm">Continue shopping</a></p>
(7)
writecustomerreview.jsp
【誤】
<a href="bookdetails.htm?bookid=<c:out value="${command.book.id}"/>">View
book details</a>
【正】
<a href="bookdetails.htm?id=<c:out value="${command.book.id}"/>">View
book details</a>