Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: OO Perl & RDBMS Strategy Question

by Joost (Canon)
on Aug 30, 2002 at 10:57 UTC ( [id://194062]=note: print w/replies, xml ) Need Help??


in reply to OO Perl & RDBMS Strategy Question

How do you do it?

I've build my own persistent objects solution for a client that had some very strict rules on their system that made most CPAN modules unusable.

In this system I have one or more engines that correspond to a DBI connection, and other objects that correspond to rows in a table (one table per class).

You can fetch specific objects from the engine by giving it the classname and id (or constraints that correspond to WHERE queries):

my $object = $engine->get('Some::Object',$object_id); my @objects = $engine->mget($class,{ name => value, name2 => value2 } +);
Saving is done by explicitly calling the save() method:
my $value = $object->get('name'); $object->set('name','other value'); $object->save();
And objects are passed their engine at creation, so they know where to save their data:
my $object = Object->new($engine,%attributes);
This system doesn't try to be transparant, which has two advantages:
  • The programmer knows when updates/insert statements are sent to the database: when the save() method is called. (or he can choose to destroy the object without saving)
  • The programmer can do searches on key => value pairs or WHERE queries, which turns out to be very useful (after all, when you've got a database, you'd better make use of the features it has too).

I've recently tried Class::DBI and it seems to do it pretty much the same, except that the DBI connection is global for a given class, which I don't like one bit.

-- Joost downtime n. The period during which a system is error-free and immune from user input.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://194062]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2024-04-24 17:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found