[Catalyst] Where is the DAO equivalent?
Jarom Smith
jarom at jaromsmith.net
Wed May 27 16:59:37 GMT 2009
Hello Catalysters:
First of all, a thousand apologies if this is a FAQ (and if it is,
please point me in the right direction). I have been programming in
Perl for a while but I freely admit there's a lot I don't know, which is
why I am here. I have completed the Catalyst tutorial, purchased the
book (which I am in the process of reading/completing) and I have
scrutinized all sorts of web pages trying to figure this out, but have
so far been unsuccessful.
Here's the problem I'm trying to solve: I have a partially-written web
application which I am trying to port to Catalyst. My app has DBI
methods to access the DB and return results -- things like
get_vendor_by_name() or get_option_list(). In Java, which is the
language I use most often these days, I would think of them as DAO
methods. Some of these methods are fairly trivial to replace in
Catalyst; for example, get_vendor_by_name now becomes
$c->resultset('Vendor')->search({name => $vendor_name})->all; However,
some of these methods are more complicated/complex and the proper DBIC
invocation to produce an equivalent result to my DBI method is more than
I would want to try to remember or replace each time I need to perform
that query. I don't mind re-writing the methods to use DBIC instead of
DBI (in fact, I kind of look forward to it), but I would like to
continue to have complex or semi-complex queries abstracted into their
own methods which I can re-use easily. The problem is that I don't know
where to put them or how to access them.
So, my question is: In a Catalyst context, where do I put these kinds of
"helper" DB methods and how do I access them? (both from within a
Catalyst app, as well as from the command-line like in a Cron job or
whatever...) Some actual specific examples would be great. I'm sure
there is a way, and I'm guessing it involves the model somehow (possibly
by creating a new model class?) but I haven't been able to figure it out
yet. I tried adding methods to the classes created by Catalyst/DBIC in
the Schema/Result directory, but gradually it dawned on me that methods
placed here are only dealing with a single entity of that type. To go
back to Java-speak, it seems like the stuff in Schema/Result are DTO
methods; what I'm trying to figure out is how/where to put the DAO methods.
Help! :-) Thanks.
jarom smith
tech go-to guy
More information about the Catalyst
mailing list