Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2007-10-16

[][]Catalyst::Model::Adapter調査中のメモ2 Catalyst::Model::Adapter調査中のメモ2 - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Catalyst::Model::Adapter調査中のメモ2 - LAPISLAZULI HILL#Catalyst Catalyst::Model::Adapter調査中のメモ2 - LAPISLAZULI HILL#Catalyst のブックマークコメント

no titleですでにやり方は出てるので,それを参考にするだけでいいんだけど.まぁ,やってみる


演習

DateTimeカスタムPluginの機能をベースに作成する

1. ひとまずこういうモジュールを作成
package MyApp::BackEnd::DateTime;

use strict;
use warnings;

use DateTime;

our $VERSION = '0.01';

sub now {
    my ($class, $params) = @_;

    unless (exists $params->{time_zone}) {
        $params->{time_zone} = 'Asia/Tokyo';
    }

    return DateTime->now(%$params);
}

1;
2.helperを実行

./script/myapp_create.pl model DateTime Adaptor MyApp::BackEnd::DateTime now

こういうModelが生成されていた

package MyApp::Model::DateTime;
use strict;
use warnings;
use base 'Catalyst::Model::Adaptor';

__PACKAGE__->config( 
    class       => 'MyApp::BackEnd::DateTime',
    constructor => 'now',
);

1;
3.呼び出す
    my $dt = $c->model('DateTime');
    $c->response->body( $dt );
4.試してみる

何度リロードしてもアプリケーション起動した時の時刻が出ます.すでに知っているので焦らない

5.サイドHelper,今度はFactory

直接修正しないで,Helperを使ってみる.Factorymodel呼び出しごとにインスタンス作成だそうな

./script/myapp_create.pl model DateTimeFactory Factory MyApp::BackEnd::DateTime now

呼び出しはこう変える

    my $dt = $c->model('DateTimeFactory');
    $c->response->body( $dt );

モデルはこうなる

package MyApp::Model::DateTimeFactory;
use strict;
use warnings;
use base 'Catalyst::Model::Factory';

__PACKAGE__->config( 
    class       => 'MyApp::BackEnd::DateTime',
    constructor => 'now',
);

1;

これでok

6.ついでにFactory::PerRequestでHelper

リクエストごとにインスタンスを生成するそうな.nowならこれがいいかも,と思ったけど変数に入れて使い回すだけだからいっしょか

./script/myapp_create.pl model DateTimeFactoryPerRequest Factory::PerRequest MyApp::BackEnd::DateTime now
7.引数ハッシュリファレンスなので困るというのは

そこもno titleで述べられているので省略

あとは

まだまだ勉強

  • Pluginを作るのか,Adaptorで作るのか→使い分けが分からない,もうPluginはいらないの?
  • AdaptorとFuctory→なんとなく分かった気がするが,実装も見る.デザインパターンとかとも比べてみる
  • C::M::Adaptorの利点をちゃんと理解する・調べる→ロジックの分離などプログラミング面はもちろん,メモリ使用量とかベンチマークとか起動時間とかの差異も欲しい
  • 具体的にロジックを追い出す方法も模索しよう→no titleの考慮した点を理解できるようにやってみる

しかし,これはほんとすっきりして良い感じ.使い回ししやすいし

JaseminJasemin2011/08/03 03:37Way to go on this essay, heepld a ton.

twyufwjkztwyufwjkz2011/08/03 16:33xxIXvX <a href="http://mvitoinpwtqn.com/">mvitoinpwtqn</a>

cqqcaerypjcqqcaerypj2011/08/04 23:32Z5xC2X , [url=http://sznbggakxhsc.com/]sznbggakxhsc[/url], [link=http://cxrtdwmfodgk.com/]cxrtdwmfodgk[/link], http://lunlsrjkzsvw.com/

zbmnnzmmzbmnnzmm2011/08/05 18:37RUfMyw <a href="http://aazawqtfwvou.com/">aazawqtfwvou</a>

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20071016