kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

Slim3をはじめてみます

Slim3のVersion 1.0.0がでたということで、遅ればせながら私もSlim3に触れることにしました。

少し触れてみて気になったこと、分かったことをメモしてみます。(何分、素人が調べた結果ですので、誤りも含まれているかも知れません。)

コントローラーの作成単位は?

Slim3のコントローラーと、Railsのコントローラーは、作成する単位が異なるようです。

Slim3では、1アクション、1コントローラーで作成するのがデフォルトのようです。Railsですと、1アクションをコントローラーの1メソッドに対応付けています。

そのため、Slim3では、Railsに比べて、小さなコントローラーが沢山作成されそうです。

scaffold機能はないの?

まず、Railsでいうscaffold機能(あるテーブルに対して、データ追加、参照、変更、削除を行う画面を自動生成する機能)がSlim3に存在しているか気になりました。

Slim3での自動生成機能は、build.xmlを使用していました。build.xmlでは、slim3-genというライブラリ(http://slim3.googlecode.com/svn/trunk/slim3-gen)を呼び出して、自動生成を行っていました。

build.xmlとslim3-genのソースを軽く覗いてみましたが、Railsのscaffold機能に相当するものは無さそうでした。ただし、コントローラーやモデルを各々作成する機能は存在していました。その他、slim3demo(http://slim3.googlecode.com/svn/trunk/slim3dem)のCRUDサンプルには、データ追加、参照、変更、削除を行っているサンプルが存在していました。

サンプルを参照して、コントローラーやモデルの自動生成を行って、アプリを作成することになりそうです。

前処理の実装方法は?

クライアントからのリクエストに対して、毎回トレースログを出力したり、文字コード変換したり、本来のサーバ処理よりも前に処理を行いたい場合があります。Slim3ではどのように実装するのでしょう?

2種類の方法がありそうです。

1つ目は、コントローラーでsetUpメソッドを実装する。ちなみに、tearDownメソッドを実装すると後処理が書けそうです。setUpやtearDownメソッドの呼び出しは、org.slim3.controller.ControllerのrunBareメソッドで実装されていました。

2つ目は、通常のJava Servletのフィルターを作成し、web.xmlに登録すれば良さそうです。

URLから呼び出すコントローラーの判定はどのようにおこなっている?

FrontControllerクラスのtoControllerClassNameメソッドで、URLのパスから、コントローラーのパッケージ名+クラス名を決めていました。大雑把には、URLの"/"を"."に置き換えて、URLが"/"で終わっていたら、クラス名を"IndexController"とする、という感じでした。

上記は、デフォルトでの判定方法で、デフォルトの動作を変更するには、自分のWebアプリのcontrollerパッケージに、AppRouterクラスを作成して、ルーティング設定を登録すれば良いようです。slim3demoのCURDサンプルが参考になりました。

共通レイアウトの実装方法は?

各画面に共通のヘッダーやフッター、メニューを作成するための機能が用意されているのでしょうか?

特別な方法は用意されてなさそうでした。slim3demoをみると、通常のJSPのようにjsp:includeタグを使っていました。

データストアのデータ抽出

データストアから、条件を指定して、データを抽出するにはどうすればよいのでしょう?

次に説明がありました。後ほどゆっくり読んでみたいと思います。

フォームクラス

slim3demoのCRUDサンプルでは、リクエストパラメーターを直接モデルクラスにコピーして、データストア登録していました。データストアとは直接関連しないリクエストパラメータを扱うフォームクラスはどのように作るべきでしょうか?

たぶん、受け取りは、フォームクラス(何も継承しなくてOK)を作成して、BeanUtil.copyで、リクエストパラメータの内容をコピーすれば良い気がします。フォームクラスのJSPへの受け渡しは、コントローラーのrequestScopeメソッドで値を設定すると、JSPから使用できるようになりました。

メール送信

ほとんど調べていませんが、メール送信はGAEで用意されているので、そちらを使えばよいはず。

ログ出力方法は?

ログを出力するための処理について、特別なことはなさそうですね。

コントローラークラスでは、こんな感じ。

    protected static final Logger logger =
        Logger.getLogger(FrontController.class.getName());
クーロンの作成方法?

GAEでは、定期的に処理を実行するクーロン機能があります。

Slim3では特別な実装は用意されていないので、次のページを読んで、GAEで準備されている方法で、実装すれば良さそうです。

途中でエンティティの構造が変わった場合それまでのデータはどうなってしまう?

Slim3の話からはずれて、GAEのキーバリュー方式についての疑問です。カラムが追加、削除になった場合は、データ保持される気がしますが、データの型が変わったときはどうなるんでしょう?今後調べたいと思います。


以上、今のところ気になっていることを、つらつらと書いてみました。