今回の内容

BBSアプリケーションの開発 (第1回)

  • Slim3のデータオブジェクト、”Model”クラスの作成
  • データストア読み書きを行う”Service”クラスの作成
  • JUnitテストケースの作成、実施

前提

以下の内容が完了していること

  • java、eclipseがセットアップ済みであること
  • eclipseにGoogle Plugins for Eclipseがインストール済みであること

これらが完了していない場合は、準備編 を参考に完了して下さい。

作成するアプリケーションのイメージ

今回作成する”SimpleBBS”の画面構成の簡易イメージです。


SimpleBBSイメージ図

4画面構成で、<トップ>ページに記事の見出し一覧を表示し、このページから<記事詳細>、<記事作成>ページへ遷移します。<記事詳細>ページではコメントの投稿、および記事の投稿者であれば<記事編集>ページへ遷移可能です。記事一覧は投稿日時の新しい順に、コメント一覧はコメント番号の昇順に一覧表示します。

プロジェクトの作成

SimpleBBSを作成するために新しいプロジェクトを準備します。準備編
の手順に従ってslim3-blankからプロジェクトを作成しましょう。

今回は以下のようなプロジェクトを作成します。

プロジェクト名 slimplebbs
ルートパッケージ slimplebbs


プロジェクト作成後のEclipseビュー

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の機能自体を無効にする、という選択肢もあります。