[Catalyst] Instant CRUD with DBIC::Schema

Zbigniew Lukasiak zzbbyy at gmail.com
Wed Mar 12 15:27:16 GMT 2008


On Wed, Mar 12, 2008 at 4:12 PM, Peter Karman <peter at peknet.com> wrote:
>
>
>  On 03/12/2008 09:44 AM, Zbigniew Lukasiak wrote:
>
>  >>  So we'd have:
>  >>
>  >>   sub thing : Local {
>  >>      my ($self, $c, $id) = @_;
>  >>      my $thing = $c->model('Foo')->fetch( id => $id );
>  >
>  > my $thing = $self->model_adaptor->fetch( id => $id );
>  >
>  > The model adaptor should know the model it is using (and in the case
>  > of DBIC also the table )
>
>  In my example, $self is not a CX::CRUD::Controller. Just a plain ol' Catalyst::Controller.
>  Why must it implement a model_adaptor method then?

OK - so that was just a misunderstanding - I thought we were still
talking about the CRUD methods.

>
>
>
>  >
>  >>      $c->stash->{object} = $thing;  # NOT a CX::CRUD::Object
>  >>   }
>  >>
>  >>  and if wanted to update $thing:
>  >>
>  >>      $c->model('Foo')->update( $thing );
>  >
>  > $self->model_adaptor->update( $thing );
>  >
>  >>  I could live with that. Does it meet your needs? Does it make it easier to implement a
>  >>  DBIC model and FormFu controller?
>  >>
>  >
>  > Yes.  In general - my point is that let's do the wrapping only for the
>  > CRUD methods that need them.  Let's not force the user to use the CRUD
>  > wrappers as their models.
>  >
>
>  Users of CX::CRUD Models or Controllers don't have to use both together. It's just easier
>  if they do. And CX::CRUD doesn't force you to only use its models.
>
>  You could have:
>
>   lib/MyApp/Model/Foo.pm     # not a CX::CRUD::Model. Just a DBIC::Schema model.
>   lib/MyApp/Model/FooCRUD.pm # is a CX::CRUD::Model::DBIC
>
>  MyApp::Model::FooCRUD can act like your ModelAdaptor. By adding yet another kind of thing,
>  a model adaptor, into the mix, that feels more complex to me rather than less.

If you'd make them to use the same db connection than indeed this
would be like the ModelAdaptor. But then again you should have just on
adaptor per model type - not per table (for models with tables).

>
>  I think I'm agreeing with you that the CX::CRUD API could be simplified, that the ::Object
>  class could go away, and that the Model class could take over the c/r/u/d methods that
>  Object currently performs.

Yeah - I would consider the objects on the stash as part of the
interface so they should be the original ORM objects.

>
>  If you like the model_adaptor() syntax in the Controller API, how would you implement a
>  ModelAdaptor class and how would you change the Controller API to use it?
>
>  --
>
>
> Peter Karman  .  peter at peknet.com  .  http://peknet.com/
>
>
>  _______________________________________________
>  List: Catalyst at lists.scsys.co.uk
>  Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>  Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>  Dev site: http://dev.catalyst.perl.org/
>



-- 
Zbigniew Lukasiak
http://brudnopis.blogspot.com/



More information about the Catalyst mailing list