Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: How to structure applications using a RDBMS

by gav^ (Curate)
on Jul 19, 2002 at 01:10 UTC ( #183101=note: print w/ replies, xml ) Need Help??


in reply to How to structure applications using a RDBMS

You might want to look at two cunning modules by Michael Schwern/Tony Bowden, Ima::DBI and Class::DBI. The first gives all your classes nice cached DBI handles and SQL statements. In your class you set up your SQL statements:

My::User->set_sql( 'getUsers', 'select * from users', 'Main' );
Which you can then retrieve in anything that uses the class:
my $sth = My::User->sql_getUsers; $sth->execute(); # etc
I like this approach because all the SQL lives in a seperate module and doesn't mess up your main application. It also has some handy shortcuts like:
$sth->execute([qw/value1 value2/], [\my $res1]); my %hash = $sth->fetch_hash;

Now Class::DBI is a great abstraction layer if, like me, you don't like to play with SQL at all. An example:

package User; use base 'Class::DBI'; User->table('users'); User->columns('All', qw/id name password/); User->coumns('Primary', 'id'); User->set_db('Main', 'dbi:mysql', 'gav', 'perlmonks');
Now like magic you have a class to talk to the database and hide you from the horrors of SQL:
my $user1 = User->new({ name => 'gav', password => 'monk' }); my $user2 = User->retrieve(1023); printf "Id: %d, Name: %s, Pass %s\n", $user2->id, $user2->name, $user2->password;
or
my $user = User->search(name => 'gav'); if ($user && ($user = $user->next) && $user->password eq 'monk') { print "Welcome gav^!\n"; } else { print "Schoo!\n"; }

This came out a bit longer than I expected, but I hope it might help somebody :)

gav^


Comment on Re: How to structure applications using a RDBMS
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (18)
As of 2015-07-07 16:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (91 votes), past polls