Jonathan Vanasco wrote:

package Website1;
my  $DB = new Website1::DB();
    # make a new ref for the website
sub handler
{
    my     $r         = shift;
    my     $user     = new Website::User( \$r, \$DB );
     my     $page     = new Website::Page( \$user , \$DB );
    my     $html     = $page->processRequest();
}

what i would like is:
sub handler
{
    my     $r         = shift;
    my     $user     = new Website::User( \$r );
     my     $page     = new Website::Page( \$user );
    my     $html     = $page->processRequest();
}

now, i guess what i'm trying to do within
Website1::User
Website1::Page
is access the
$DB in the base of Website1 that i define just before the handler
BUT
I'm trying to do so in a way that both:
Website1::PackageName
Website2::PackageName
WebAppFramework::PackageName
Will all retreive the correct DB from the script that defines the handler



Ok. This means you want to make your Website::User and Website::Page more intelligent. If I got you right the only thing have to implement
for each user is Website1::DBI and Website2::DBI.


What you really need here when talking about Pattern-Programming is a "Factory-Class" which creates the
appropiate WebAppFramework::DBI-Sub-Class for you and design all your Website*::DBI-classes as "Singletons".


===================8<===================
package WebAppFramework::DBIFactory;

sub getDb {
   my $dbiModule = shift;
   require($dbiModule); ## load the apprioate module
   return $dbiModule->instance(); ## get an instance of the module
}

1;
===================8<===================

===================8<===================
package WebAppFramework::User;

sub new {
   my $class = shift;
   my $r = shift;

my $this =
{
db => WebAppFramework::DBIFactory::getDb($r->dir_config("DBIModule"));
};


   bless $this, $class;
}

1;
===================8<===================

===================8<===================
<Location /webapp1>
   PerlSetVar DBIModule Website1::DBI
</Location>

<Location /webapp2>
   PerlSetVar DBIModule Website2::DBI
</Location>
===================8<===================

Hope I got you right? If you don't want to use config values you could also use the name of the package
in the handler e.g. Website1, Website2 and add "::DBI" in your factory method.


Tom

--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html



Reply via email to