Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??
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:
relevant code from modules:
package; use DBI; sub new { db connection happens here } sub commit {...} package 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:
  • 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.
not so good:
  • for certain calls, search path seems longer than is necessary, so when client code calls a db method:
  • EG::Example->get_client_id_for_username()
    EG::DB::Access (no match) EG::DB::Clients (no match) EG::DB::Vendors (no match) EG::DB::Employee (match)
    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 (no match) EG::DB (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 be rolled into EG::DB to eliminate one additional search level? Thanks for any opinions.

In reply to refactoring - is this layout a mess or should we leave well enough alone? by archimago

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2023-03-27 14:28 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (65 votes). Check out past polls.