[Catalyst] Creating a thin Model

Christopher H. Laco claco at chrislaco.com
Fri May 18 18:05:21 GMT 2007


Jamie Neil wrote:
> Can anyone tell me the best way of wrapping a non catalyst perl module
> in a Catalyst Model?
> =

> I'm trying to setup the following stack:
> =

> MyApp::Controller::Widget
> MyApp::Model::Widget
> MyApp::Logic::Widget
> MyApp::Schema::DB
> =

> where MyApp::Model::Widget is based on Catalyst::Model, contains the
> configuration information for MyApp::Logic::Widget, and makes the
> methods in MyApp::Logic::Widget available in MyApp::Controller::Widget
> as $c->Model('Widget')->mymethod(...);
> =

> MyApp::Schema::DB is a DBIC Schema which I want MyApp::Logic::Widget to
> use for storage, but not just passed through to the Model in the same
> way that Catalyst::Model::DBIC::Schema does.
> =

> There is obviously more than one way to do this from looking at all the
> other models on CPAN, but is there some kind of best practice? Should I
> use AUTOLOAD, ACCEPT_CONTEXT, COMPONENT, override new or something else?
> =

> I did see a very promising thread on this issue a few months ago, but
> this question
> (http://lists.scsys.co.uk/pipermail/dbix-class/2007-January/003289.html)
> was never really answered. I've been going round and round in circles on
> this for a couple of weeks now, so some pointers (or even better example
> code) would be most welcome.
> =


You're right. It depends on a few things.
Does the module you're wrapping have a new? Is it statefull? stateless?
Is it self creating, or is it a factory that creates other things.

Those are all factors.

Personally, I almost always do:

sub COMPONENT {
   my $self =3D NEXT::new

 diddle config...return $self
}

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 187 bytes
Desc: OpenPGP digital signature
Url : http://lists.scsys.co.uk/pipermail/catalyst/attachments/20070518/d063=
eb92/signature.pgp


More information about the Catalyst mailing list