Slideshow transcript
Slide 1: Catalyst::Model::Adaptor Hideo Kimura (hide-k)
Slide 2: Catalyst のいやんなところ • component が context に依存してるー>特に Model! • MyApp::M::Foo にビジネスロジックを実装する と Catalyst でしか使えない • Test が面倒くさい!
Slide 3: そこで C::M::Adaptor • 既存クラスを C::Model にしてくれる アダプタークラス • 必要なのは – Model にしたいクラス • 超簡単!
Slide 4: 作り方 Helper がついてる script/myapp_create model Foo Adaptor Foo::Class create package MyApp::Model::Foo; use strict; use warnings; use base 'Catalyst::Model::Adaptor'; __PACKAGE__->config( class => ‘Foo::Class', constructor => ‘create', ); 1;
Slide 5: 呼び出し方 sub bar : Local { my ($self, $c) = @_; $c->model(‘Foo')->bar; } 普通の Model みたいに使える
Slide 6: コンストラクタ引数の渡し方 config で渡せる myapp.yml Model::Foo: args: foo: ... bar: ... 普通の Model と一緒
Slide 7: コンストラクタ引数の注意 デフォルトではコンストラクタの引数に HashRef しか渡せ ない $class->new(foo => ‘aaa’, bar => ‘bbb’); sub mangle_arguments { my ($self, $args) = @_; return %$args; } ちょっとだけおまじないが必要
Slide 8: Adaptor, Factory, Factory::PerRequest • C::M::Adaptor – アプリケーション起動時にクラスをインスタンス化 • C::M::Factory – $c->model(‘Foo’) の呼び出しの度にインスタンス化 • C::M::Factory::PerRequest – Factory と同じだけど、 1 リクエストで最初の呼び出 しの時だけインスタンス化
Slide 9: Net::Twitter を Model 化
Slide 10: 他にも • DBIC を使ったビジネスロジッククラスを Model 化して単体テストを可能に • TheSchwartz を Model 化してキューの監 視ツールを Catalyst で作ってみる • アイデアはキミしだい!
Slide 11: C::Model::Adaptor を使うと • 既存クラスを簡単に Model にできるよ • context から設定も簡単に渡せるよ • クラスはアプリケーション起動時にインスタンス化され るよ • ビジネスモデルを C::Model から追い出せるよ • Catalyst に依存しない Test ができるよ • Catalyst は Dispatcher と Engine だけ やってればいいよ(サンフランシスコ在住 男性) • ちょっと小粋ないいやつです
Slide 12: ご静聴ありがとうございました m(_ _)m



Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 0 (more)