逃げ口上
この記事は、所謂「モダンperl」とは全くもって相反するものと思われます。しかしながら、ユースケースとして記録しておくこと自体に意義の有ることと判断し、ここに掲載する次第です。
この手法を使わざるを得ない時は、設計がぐちゃぐちゃな状態であるか、単に「モダンな」設計ではないものと思われます。今一度、よく設計を見直すことを考慮すべきでしょう。
…この記事があるということは、現に僕自身がぐちゃぐちゃな設計で作ったcatalystアプリケーションを世に出してしまい、そのためにこんな妙な解決策 - バッドノウハウ - を使う必要に迫られたのだということです。これについては、過去の自分を叱咤するとともに、現在の自分の糧とすべしと肝に命じております。
無論、この方法自体はバッドノウハウとはいえ、より研ぎ澄ませば、まさに「モダンな」ノウハウとなり得るものかもしれませんが、僕自身にはそのようなユースケースは思いつきませんでした。
バッドノウハウ?上等!
さて、逃げ口上はこの辺にしときます。色々とキリがないので^^;このノウハウ自体は、えらくあっさりとしたものです。
例えば、バッチスクリプト./script/batch.plで、アプリケーションMyApp配下のパス/ugly/batch_targetを、引数付きで定期的に叩きたい場合。
./script/batch.plは以下のようになります。
use warnings; use strict; use MyApp; use Catalyst::Stats; my $app = MyApp->new( stats => Catayst::Stats->new ); my $res = $app->forward( '/ugly/batch_target', [ time() ] ); print $res;
これだけです。あとはこのスクリプトをcronに食わせるなりするだけで、定期的に/ugly/batch_targetをぶっ叩いてくれます。
ちなみに、今回は引数をtime()としました。あくまでサンプルなので。
ポイントは、Catalyst::StatsオブジェクトをMyApp->statsに食わせる所です。
なぜ僕はこの方法を「モダン」じゃないと主張するのか
さっきから勿体ぶった書き方をしてきましたが、そもそもこの方法が「モダン」ではないと僕が主張するのは、ロジックとコントローラの分離が為されていない故のノウハウである
という、香箱を組む猫すら青ざめる(?)、えらく間接的な理由からです。
コントローラ配下のロジックを叩くということはつまり、「コントローラ」配下に「ロジック」が実装されていることに他ならない。これはこのあたりのスライドにもあるように、コントローラをぐちゃぐちゃにする最短ルートといえます。
0 件のコメント:
コメントを投稿