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

I've used this in places too.

I was worried about scoping issues: $class gets set in one package, and then gets used/requires in another package.

Replies are listed 'Best First'.
Re: Re: Re: OO Design Advice Sought
by eric256 (Parson) on Nov 18, 2003 at 23:07 UTC

    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
      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.