I ran into the same issue when setting up Rose::DB on an already
established, very large DB. I know this is not recommended, but since you
can do it, here it is. Your base Rose::DB::Object module would resemble the
following:
package My::DB::Object;
use My::DB;
use Rose::DB::Object::Manager;
use base qw(Rose::DB::Object);
sub init_db {
My::DB->new;
}
sub get_objects {
my $self = shift;
Rose::DB::Object::Manager->get_objects(object_class => "$self", @_);
}
sub get_objects_iterator {
my $self = shift;
Rose::DB::Object::Manager->get_objects_iterator(object_class => "$self",
@_);
}
sub get_objects_count {
my $self = shift;
Rose::DB::Object::Manager->get_objects_count(object_class => "$self",
@_);
}
sub delete_objects {
my $self = shift;
Rose::DB::Object::Manager->delete_objects(object_class => "$self", @_);
}
sub update_objects {
my $self = shift;
Rose::DB::Object::Manager->update_objects(object_class => "$self", @_);
}
Now all of your classes will have Thing->get_objects, Thing->update_objects,
etc...
I also added a paging option that returns an iterator and a Data::Page
object for all my tables, this is most likely not the best implementation
for this:
use Data::Page;
...
sub get_objects_pager {
my $self = shift;
my %data = @_;
my $iter = $self->get_objects_iterator(@_);
my $per_page = $data{per_page};
my $current_page = $data{page};
delete $data{per_page};
delete $data{page};
my $count = $self->get_objects_count(%data);
my $page = Data::Page->new();
$page->total_entries($count);
$page->entries_per_page($per_page);
$page->current_page($current_page);
return ($iter, $page);
}
....
So on the script side: my ($iter, $page) =
My::DB::Thing->get_objects_pager(per_page=>10);
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Michael
Reece
Sent: Wednesday, December 06, 2006 12:04 PM
To: Rose::DB::Object list
Subject: [RDBO] Manager classes?
do most users of RDBO tend to stick to the Thing and Thing::Manager pattern
from the docs and tutorial?
my $thing = Thing->new(...)->load;
my @things = Thing::Manager->get_things(...);
it seems like a lot of classes to juggle, when i'm looking at 100+ tables in
the schema ..
what headaches might one run into if the manager methods are created on the
Thing class instead?
my $thing = Thing->new(...)->load;
my @things = Thing->get_things(...);
alternatively, has anyone implemented a pattern using single manager class
that manages all tables?
my @those = TheOneTrue::Manager->get_those(); # returns Those
objects
my @these = TheOneTrue::Manager->get_these(); # returns These
objects
it seems like an intriguing idea, but what headaches might one run into with
this approach?
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object