http://qs1969.pair.com?node_id=644284

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:
EG/DB.pm EG/DB/ EG/DB/Access.pm EG/DB/Clients.pm EG/DB/Vendors.pm EG/DB/Employees.pm EG/Example.pm
relevant code from modules:
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);
the good: not so good: 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.

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
    Method lookups are cached, so I'd say "no" if the only reason is to eliminate a search that doesn't even occur.
      ok thanks. do you find the layout convoluted or does it make sense to you?

        It don't find it very useful. It's not that it does anything bad, it's just that I don't see what value it adds. None of the "good" points hold any value for me.

        I'm not sure I agree with your second "good" point anyway. For example, when using get_client_id_for_username, the programmer knows he's using EG::DB::Clients. He *should* know he's using EG::DB::Clients. That's why the methods were placed in a seperate module in the first place. Perl doesn't care if the functions are in seperate modules or not. By hiding the partitioning of the functions, you're nullifying the advantage of creating the modules in the first place.

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
    I think your structure has already achieved sensible decoupling which is a prime goal of refactoring. Short of moving to an ORM, you have a plenty fine scheme.

    Phil

    The Gantry Web Framework Book is now available.