in reply to Re: Re: OO Design Advice Sought
in thread OO Design Advice Sought

You could then just make this class inherit from that base class, and overwrite a _create sub to do the class initialization

use Physemp::Model::Account; sub _create { my $self = shift; $self->{instance} = new Phsemp::Model::Account; }

Then you could do intialization in both the base class and the derived class, and you don't have to worry about scoping. Or you could combine the two together so that you can pass it the name of the class to create.


___________
Eric Hodges

Replies are listed 'Best First'.
Re: Re: Re: Re: OO Design Advice Sought
by cleverett (Friar) on Nov 18, 2003 at 23:26 UTC
    Unfortunately, Class::DBI has a boatload of constructors:
    use Physemp::Model::Account; my $account = Physemp::Model::Account->create(); $accounts = Physemp::Model::Account->search(name => 'Ben Bitdiddle'); $account = Physemp::Model::Account->retrieve(1); my $accounts = Physemp::Model::Account->retrieve_all();

    and I'm going to need them all over the place.

    I was thinking something like this:

    package My::Browser; use base 'My::TT'; my $_cache; sub pager_class { my $class = ref $_[0] || $_[0]; $_cache->{$class} = $_[1] if @_ > 1; return $_cache->{$class}; } BEGIN { (my $temp = __PACKAGE__->pager_class()) =~ s#::#/#igr; require "$temp.pm"; } package Physemp::Admin::Clients; use base 'My::Browser'; use strict; use warnings; use Physemp::Model::Account; __PACKAGE__->pager_class('Physemp::Model::Account');

    But "My::Browser" would get compiled ahead of "Physemp::Admin::Clients". I was also thinking of using multiple inheritance, but that won't fly.

    I guess I want the equivalent of a C++ template class in Perl.