Hi Terrence --

I've been meaning to respond to your post.  Hopefully I can make this a
meaningful and cogent (albeit late) reply.  It's a very complicated topic.


> But what is missing from this strap-together approach? What is
> better about it? I know for one that constant look-and-feel might
> be better left to an HTML design tool (such as Dreamweaver) when
> taking the HTML::Template route.

Mason is a server-page system.  It is, architecturally, no different from
EmbPerl, ASP, JSP or ColdFusion.  CGI::Application is what I would describe
as an "application-oriented" architecture.  Combined with a templating
system, such as HTML::Template, it is a complete solution.

There are two primary differences between a "server-page" system such as
Mason and an application-oriented system such as CGI::Application.  First,
and most obvious, is that server page systems combine application code and
HTML in the same document.  Second, but possibly even more significant, is
the fundamental desire of all server-page system to make every screen in
your site homogenous.


There are reasons for choosing both.  Here is one *very* rough way, IMHO, to
think about it:

A server-page system MAY be preferable if:
* There is only one person developing the site.
* All your developers are generalists -- they are all responsible for both
code and HTML design.
* Your site has a very homogenous level of interactivity from page to page.


An application-oriented system MAY be preferable if:
* There is more than one person developing the site.
* Your developers are specialists -- some are expert coders, and some are
expert HTML designers.
* Your site consists of some sophisticated web applications and some HTML
content.


The way I work predominantly falls into the second category.  As a result, I
use application-oriented systems.  I developed the CGI::Application
architecture because I wanted a formal structure for creating web software
which was application-oriented.  The CGI::Application architecture allowed
me to develop web software using tried-and-true techniques, such as
Object-orientation and Model-View-Controller.  Applying these techniques is
not easy to do in server-page systems.  To attempt to do so requires bending
the architecture into a software pretzel.


There are, of course, problems related to using an application-oriented
system when the job calls for something else:

* If you have only one developer who writes both HTML and code, the forced
separation between the two can add addition steps.
* If you have to add homogenous interactivity to every page in your site,
you may have to invent some system for doing so outside of your application
architecture.


I have also, from time to time, had to work on a server-page system.  It has
always been a dreadful mess whenever the requirements of the project do not
match the preferred set of properties.  The problems I've run into in this
circumstance are generally:

* The work of programmers and HTML designers collide.  A designer will try
to make a change which breaks code, and vice-versa.
* It is very difficult to design sophisticated applications.  Multi-screen
applications in a server-page system necessitate "pages" which act as
switches.  (In CGI::Application parlance, there must be one "server-page"
per run-mode.)  The result is that code is spread all over the place.
"Pages", which are really run-modes of a bigger application, are scattered
all over the server, without any benefit.  (Under what circumstance would
you call "save_new_widget.html" outside of some widget-related application?)


It is my opinion that an application-oriented system combined with some
light-weight system (possibly home-grown) for adding interactive components
to non-application pages is a better solution than a full-fledged,
heavy-weight server-page system, most of the time.

FWIW, there is no dominant module on CPAN which fills the role of allowing
"light-weight components" to be inserted into HTML pages as well as
CGI::Application run-modes, but there are some ideas which seem to be
getting interesting.  One which I'm taking a look at now is Sam Tregar's
HTML::Template::Expr.  With a little effort this module could be
incorporated into an Apache module to provide interactive components which
would operate in both HTML documents and CGI::Application modules.

I can imagine a new system which would allow you to use the same techniques
for light-weight interactivity as you might use for sophisticated
applications, without the snarl of combining code in HTML or scattering your
application code into dozens of separate documents.  I think this would be a
fantastic project for the right person.


Warmest regards,

-Jesse-



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to