note
dragonchild
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.
<ol>
<li>You are now explicitly implementing portions of your website as a state machine. This aids documentation and maintainability by <i>naming</i> your if-else blocks.
<li>The state machine control-code is now done for you.
<li>You are more easily implementing MVC, with C::A as your Controller code.
<li>It is very nice to see the code for many related pages all in one place.
<li>All your code now easily shares a print() method. (I have mine in my C::A superclass.) This allows for things like:
<code>
sub some_state
{
my $self = shift;
# do some stuff here to populate %template_params
return $self->print(
$display_mode,
$template_name,
%template_params,
);
}
</code>
<li>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].
<li>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.)
</ol>
<p>Also, you might be confusing something I was having issues with, at first. I originally thought I needed to implement my <b>entire</b> 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.
<div class="pmsig"><div class="pmsig-85580">
<p>------
<br><i>We are the carpenters and bricklayers of the Information Age.</i>
<p>Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.
</div></div>
320933
320933