archimago has asked for the wisdom of the Perl Monks concerning the following question:
management has decided that we will be refactoring the codebase of our mod_perl web app. i'm looking at our database access methods and trying to decide whether to re-structure them. here's the code i've inherited.
module layout:
module layout:
relevant code from modules:EG/DB.pm EG/DB/ EG/DB/Access.pm EG/DB/Clients.pm EG/DB/Vendors.pm EG/DB/Employees.pm EG/Example.pm
the good:package EG::DB.pm; use DBI; sub new { db connection happens here } sub commit {...} package EG::DB::Access.pm use base 'EG::DB::Clients'; use base 'EG::DB::Vendors'; use base 'EG::DB::Employees'; package EG::DB::Clients; use base 'EG::DB'; sub get_client_id_for_username { ... } package EG::Example; use EG::DB::Access; my $dbh = EG::DB::Access->new(); my $client_id = $dbh->get_client_id_for_username($client_username);
- none of the db modules need to know about each other, they only know about EG::DB.
- none of the client code needs to know about the specific modules, all methods are accessed through EG::DB.
- if methods move, for some strange reason, from one module to another, no calling code needs to be updated
- adding new db modules only necessitates a change to EG::DB::Access (an additional 'use base ...') and new 'use' statements don't need to be added to any other existing modules.
- for certain calls, search path seems longer than is necessary, so when client code calls a db method:
searches:EG::Example->get_client_id_for_username()
and is even longer for the few methods in EG::DB such as when client code calls "new" or "commit" method:EG::DB::Access (no match) EG::DB::Clients (no match) EG::DB::Vendors (no match) EG::DB::Employee (match)
so is it bad enough to warrant re-structuring? is the longish search path that expensive with mod_perl or should we just leave it alone. Does it really buy us that much convenience? Should Access.pm be rolled into EG::DB to eliminate one additional search level? Thanks for any opinions.EG::DB::Access (no match) EG::DB::Clients (no match) EG::DB::Vendors (no match) EG::DB::Employee (no match) EG::DB (match)
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: refactoring - is this layout a mess or should we leave well enough alone?
by ikegami (Patriarch) on Oct 11, 2007 at 17:27 UTC | |
by archimago (Pilgrim) on Oct 11, 2007 at 17:33 UTC | |
by ikegami (Patriarch) on Oct 11, 2007 at 18:29 UTC | |
Re: refactoring - is this layout a mess or should we leave well enough alone?
by philcrow (Priest) on Oct 11, 2007 at 17:48 UTC |
Back to
Seekers of Perl Wisdom