in reply to Breaking up a CGI::Application program

A couple ideas:

  1. Move your HTML into templates. If you're working on an application that's complicated enough to need 4,000 lines of code then you're definitely ready for templates! HTML::Template is a simple way to do this, but of course there are tons of options.
  2. Move your database access into model classes. You could use something like Class::DBI or roll your own with a similar interface.

When you're done with that I think you'll find your 4000 line app has shrunk considerably. If it's still too big then you can think about making several smaller apps that talk to each other. But don't do that till you've dealt with much more pressing concerns.

-sam

  • Comment on Re: Breaking up a CGI::Application program

Replies are listed 'Best First'.
Re^2: Breaking up a CGI::Application program
by debiandude (Scribe) on May 31, 2006 at 20:39 UTC

    Hey thanks, but there is no html in the CGI::Application. Everything is already done using HTML::Template. I put the source on SVNWEB. You can check it out here if you care.

    Update: fixed the link

      This is, in my opinion, equivalent to putting HTML in your code:

      $html_output .= $q->start_html(-title=>'petnuch.com', -style=>{-src=>'/css/layout.css'} ); $html_output .= banner($self); $html_output .= menu($self); $html_output .= create_error($self); $html_output .= footer($self); $html_output .= $q->end_html();

      You can definitely shorten and simplify this code a great deal by using templates instead.

      -sam

      PS: While you're in the code - write some comments! No wonder you're finding this hard to maintain - it's 4,000 lines of code without a single hint as to what it's trying to do.

        Agreed about the comments. But as far as me being able to simply the code a great dead by using templates I don't understand. If you look at what the functions (banner, menu, footer, etc..) do you will see this (I took menu as an example because it is the simpliest):

        sub menu { my $self = shift; my $template = $self->load_tmpl('menu.tmpl', cache => 1 ); return $template->output; }

        Those function calls are there because every page has a banner, a footer, a menu. The templates have various variables in them so that each banner, footer, whatever is customized depending where you are in the site. Are you really talking about something else? Any I using templates wrong?!?