http://qs321.pair.com?node_id=404428

geektron has asked for the wisdom of the Perl Monks concerning the following question:

I have a new app that I'm trying to make sure I've created the right inheritance tree for common/ reused methods. Right now, it looks like this:
           CGI::Application
                  |
             SiteManager
                  |
       ----------------------
       |                    |
   EventManager        EmailManager
where SiteManager.pm really just holds utility function, common modules, etc. When I first put this together, it only required the EmailManager module, so I didn't have the SiteManager or EventManager pieces. now that the site is growing in functionality, I want to break out common methods , but i still want to run the application through one main CGI::Application-type  $obj->run() method.

Right now, both EmailManager and EventManager  use base qw# SiteManager #, which would make sense if i were running 2 different CGI-base scripts (which i've done previously).

i know that i could probably get away with instantiating one or the other object in the cgiapp_init method, but that doesn't feel like 'the right way'.

should i adjust my inheritance somehow? should i build a separate controller module that  uses both EmailManager and EventManager (and 'imports' their methods via the cgiapp_init() method), and have that be a subclass of SiteManager?