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


in reply to Why CGI::Application?

Being someone who just implemented his first CGI::Application code yesterday (replacing a current app), let me tell you what C::A does for you.
  1. You are now explicitly implementing portions of your website as a state machine. This aids documentation and maintainability by naming your if-else blocks.
  2. The state machine control-code is now done for you.
  3. You are more easily implementing MVC, with C::A as your Controller code.
  4. It is very nice to see the code for many related pages all in one place.
  5. All your code now easily shares a print() method. (I have mine in my C::A superclass.) This allows for things like:
    sub some_state { my $self = shift; # do some stuff here to populate %template_params return $self->print( $display_mode, $template_name, %template_params, ); }
  6. Handling redirects and save-type pages is done for you. For an excellent example of this, check out http://www.mail-archive.com/cgiapp@lists.erlbaum.net/msg00849.html.
  7. You can accidentally turn your cgi-scripts into Apache handlers. (Well, it's a little more complicated than that, but it definitely gets you 90% of the way there.)

Also, you might be confusing something I was having issues with, at first. I originally thought I needed to implement my entire application as one monolithic C::A app. But, a friend of mine showed me what his company did. They have some 20 different C::A's that all work together, passing responsability off as necessary. They have one main C::A, which handles logging and the homepage. Then, every major subsystem (reports, user admin, preferences, etc) have their own C::A. If something is complicated, create another C::A inside that. His rule of thumb was 10-12 states, at most. More than that and you should look at breaking it up into two C::A's (if possible). Also, every one of your C::A's inherits from some abstract superclass that inherits from C::A, which implements things like how to connect to the DB, what CGI class to use, how to display, and other basic functionality.

------
We are the carpenters and bricklayers of the Information Age.

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.