今回の内容
BBSアプリケーションの開発 (第1回)
- Slim3のデータオブジェクト、”Model”クラスの作成
- データストア読み書きを行う”Service”クラスの作成
- JUnitテストケースの作成、実施
前提
以下の内容が完了していること
- java、eclipseがセットアップ済みであること
- eclipseにGoogle Plugins for Eclipseがインストール済みであること
これらが完了していない場合は、準備編 を参考に完了して下さい。
作成するアプリケーションのイメージ
今回作成する”SimpleBBS”の画面構成の簡易イメージです。
4画面構成で、<トップ>ページに記事の見出し一覧を表示し、このページから<記事詳細>、<記事作成>ページへ遷移します。<記事詳細>ページではコメントの投稿、および記事の投稿者であれば<記事編集>ページへ遷移可能です。記事一覧は投稿日時の新しい順に、コメント一覧はコメント番号の昇順に一覧表示します。
プロジェクトの作成
SimpleBBSを作成するために新しいプロジェクトを準備します。準備編
の手順に従ってslim3-blankからプロジェクトを作成しましょう。
今回は以下のようなプロジェクトを作成します。
プロジェクト名 | slimplebbs |
ルートパッケージ | slimplebbs |
Slim3のパッケージ構成について
開発に入る前に、Slim3の基本となるパッケージ構成を簡単に説明します。
- root.controllerControllerが属するパッケージです。ControllerはServletを便利にしたもので役割は同じです。リクエストの処理を行い、結果をViewのjspやレスポンスに出力します。org.slim3.controller.Controllerの実装クラスをこのパッケージ以降に配置します。また、Controllerのパッケージとクラス名は、リクエストのURLと密接に関係しています。例えば「http://(app-id).appspot.com/」のリクエストは「root.controller.IndexController」、「http://(app-id).appspot.com/bbs/post」のリクエストは「root.controller.bbs.PostController」が処理を行います。Antタスクのgen-controller、またはgen-controller-without-viewを使うと、ControllerとTestCaseの雛形クラスを簡単に作成できます。
- root.model(基本的には)Modelが属するパッケージです。Modelはデータストアに読み書きするデータオブジェクトです。@Modelアノテーションを付けたPOJOクラスに、主キーとなるKeyプロパティを必ず1つ定義する必要があります。データストアでは、パッケージ名を除いたクラス名がKIND名(RDBで言うところのテーブル名)になり、Modelオブジェクト1つがデータストアの1エンティティになります。Antタスクのgen-modelを使うと、ModelとTestCaseの雛形クラスを簡単に作成できます。
- root.serviceServiceが属するパッケージです。Serviceは主にデータストアにModelを読み書きするためのロジックを持ちます。Serviceに関しては特定のクラスの継承やアノテーションを付ける必要はありません。Antタスクのgen-serviceを使うと、ServiceとTestCaseの雛形クラスを簡単に作成できます。
これらのパッケージに配置されるクラスはHOT Reloadingの対象となります。
◆HOT reloadingとは◆
HOT
reloadingは、サーバーを再起動しなくてもJavaクラスの変更が反映される仕組みで、開発環境で利用できる便利な機能です。但し、全てのクラスがHOT
reloadingに対応しているわけではなく、基本的には上記パッケージに属するクラスが対象となります。
HOT reloadingはとても便利ですが、HOT reloading対象外クラス(COOLクラス)から、HOT
reloading対象クラス(HOTクラス)は扱えない、という制約があります。特に少し複雑なアプリケーション開発では意図せずCOOLクラス→HOTクラスを参照してしまうことがあり、この制約を知らないとハマる可能性があるので注意が必要です。(例えばroot.filterというパッケージの自前ServletFilterからModelを生成してデータストアに保存したい、などはこの制約に引っ掛かります)
この場合の対処法など詳細は、
Slim3公式(日本語はこちら)を参照して下さい。あるいは、HOT reloadingの機能自体を無効にする、という選択肢もあります。