[Catalyst] Models and inflating
Alexander Tamm
alex at frantic.com
Mon Feb 23 21:43:11 GMT 2009
Jonathan Rockway wrote:
>> functionality. If I put the functionality in the Schema::*, I will
>> have about 400 lines of code that I need to replicate across eight or
>> more sites and the classes won't be usable without DBIx::Class or
>> Catalyst.
>
> No, your current solution is the one that's not usable without Catalyst
> and DBIC.
That's a weird conclusion... I admit that the example I posted was not
very descriptive of my solution. (There were even some omissions, like
"use Moose".) What I have done in the real applications is more
something like:
package TestApp::Model::Foo::Bar;
use Moose;
extends 'RW::Bar';
1;
Where RW::Bar is the class with the actual functionality, completely
independent of DBIC or any other storage solution.
> If you just want some random classes, you write them:
>
> package Class;
...
> 1;
>
> I usually "wrap" the DBIC classes like this when I have operations that
> logically operate on a group of "unrelated" (in the DB) objects, or
> operate on two separate schemas. (What most people do in the controller
> I do in what I call "Backend" classes. It's the glue between the
> low-level DBIC stuff, and high-level operations.)
Your example does not show how Class is being used or how an object is
created/inflated, but illustrates *basically* what I want to do.
> If your classes depend on the structure of DBIC results, then the code
> needs to go in your schema classes. That is how everyone does it.
> (Your "full_name" example is just the sort of thing that you would keep
> inside DBIC.)
My classes don't depend on the structure. I only want to initialize
objects with values that sometimes happen to come from a database. I was
under the impression that this initalization can easily be done with
DBIC, but I still haven't seen an example of a class with more complex
functionality. I guess I could just use HashRefInflator and create my
objects from hashrefs, but that involves a bit more repetitious code.
As I said before, the full_name example has nothing to do with my
application. It was only for illustration.
Regards,
Alex
More information about the Catalyst
mailing list