Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

Catalyst::Model::Adaptor

From hidek, 4 months ago

CatCon#1

853 views  |  0 comments  |  0 favorites  |  6 downloads
 

Tags

perl catalyst

 
 

Groups / Events

 

 
Embed
options

More Info

This slideshow is Public
Total Views: 853
on Slideshare: 853
from embeds: 0

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