まだ続くモデル分離とかテストとか

今日も今日とて。
MyApp::Web作ったらconfig読めなくなったーって喚いてたら昨日(むしろ今日の午前4時)に神からコメントで原因を教えてもらう。
プロジェクトを catalyst.pl MyApp で作ったあとでパッケージ名書き換えたりファイル移動したりしたのがまずかった。

  • Catalyst::Plugin::ConfigLoaderが読む設定ファイルはアプリケーションクラスをdecamelizeしたファイル名である


勉強になった。神に感謝。
最初から catalyst.pl MyApp::Web とか打てばすべてよしなに実行される。

モデル作りまくるのがめどい

前述の通り、Catalyst::Model::Adaptorを使うと、テーブルに対応するモデルを、テーブルの数だけ作らなければならない。
めどいのでググるとやっぱり同じこと思ってる人がいて、以下のどっちかを使えば解消される。


違いは調べてない。なんとなくMultiを使用。
今までModel以下にはDBIC.pmだけだったが、ここにファイルを一つ追加して、そいつ経由で全てのモデルを呼べる。
作者に倣ってService.pmとかしとく。



今まで神の遺産をコピペしたりパクったり書き換えたりして使ってたから、あまり壁にはぶつからなかったけど、自分で新しい何かをやろうとすると詰まる詰まる。
でも何とか導入完了。

テストしよう

さてMVC分離できたしconfig読めるしモデル作りまくらなくてよくなったし、テスト書こう。

  • 普通こうするだろう


とか書いてたら。

Catalystでテストする testデビュー - pepponの日記

Catalyst::Manual::Tutorial::Testing - RUNNING THE "CANNED" CATALYST TESTS

There are a variety of ways to run Catalyst and Perl tests (for example, perl Makefile.PL and make test), but one of the easiest is with the prove command. For example, to run all of the tests in the t directory, enter:

$ prove --lib lib t


何言ってるかわかんないけど prove --lib lib t って打った方がいいんだね!
言語の壁を越えるプログラミング言語バンザイ。

% prove --lib lib t
t/01_create_user....ok
All tests successful.
Files=1, Tests=5,  1 wallclock secs ( 0.04 usr  0.01 sys +  0.76 cusr  0.05 csys =  0.86 CPU)
Result: PASS


いい感じ。

モデルを跨ぐ処理はどこに書く?

UserとBookがあったとして。
Userが本を借りたら、user.book_countを++して、Bookに新たにデータを作成するとか。
どこに書いたら気持ち悪くないのかなーと思ってたら先日lestrratさん本人からコメントを頂いた
UserとBookに同名のメソッドを作って、片方のメソッドの中でもう片方のメソッド呼べばいいじゃん、って感じ。
同名ってのがしっくりこないけど、これも一つの解。