[Catalyst] Catalyst, MVCs and other MVCs

Adam Clarke adam.clarke at strategicdata.com.au
Tue Nov 4 06:56:51 GMT 2008

Hi Jacinta,

On 04/11/2008, at 2:25 PM, Jacinta Richardson wrote:

> If anyone has anything they'd like to share about Catalyst vs Jifty,  
> Gantry,
> CGI::App, Maypole, Mojolicious etc, I'm certainly open to insights.   
> I don't
> have enough time to learn all of these frameworks properly so I'm  
> very dependent
> - at this stage - on information from the users and creators.

I don't have huge insights but I'll add those that I do. Several years  
ago we informally reviewed CGI::Application, Maypole and (a bit later)  
Catalyst. We gave Jifty a quick look but its philosophy of one-true- 
way scared us off a bit. We put it on our 'wait and see' list but  
haven't felt the need to look at it in detail again yet.

When we gave Maypole a go and found that the scaffolding stuff  
provided a great 10 minute 'wow that was easy' experience but in the  
longer term got in the way. We tinkered with the resulting code to  
make it work the way we wanted but worried that we would get stuck  
with ageing versions of Maypole installed because our modifications  
wouldn't work with the next release. Our assessment was that there was  
a 'Maypole Way' and if you didn't like it you were in for extra work  
at implementation and extra problems during the application life-cycle.

As a result we didn't pursue Maypole for any real projects. In  
addition, Catalyst appeared on our radar and our initial impression of  
Catalyst was that it was very much inspired by Maypole but was  
intended to address the kinds of concerns we had about it. People  
seemed to be deserting Maypole for Catalyst at that time. We decided  
to keep an eye on things.

CGI::Application seemed nice and light weight. We used it in a number  
of projects at the same time as we evaluated Maypole. After a while we  
noticed that on every job we added our own config handling code, and  
session handling code, and dispatch handling code. In addition we  
didn't really like HTML::Template which was the de facto CGI::App  
templating standard at the time. I assume ours was a common experience  
since a long list of plugins and modules appeared adding these  
standard capabilities. We replaced our custom code with a standardised  
subset of them (including one that facilitated using Template Toolkit)  
from various authors.

At this point I took another look at Catalyst and it was immediately  
clear that all the add-on modules we used for CGI::Application  
projects were effectively included in the core of Catalyst so we  
decided to evaluate it further. Our first experiences of trying to use  
it were quite frustrating - there were zillions of dependencies to be  
met and this could take a fair bit of perseverance since they would  
often fail to install for reasons which were difficult to determine. I  
believe this situation has improved significantly. The documentation  
was also lacking but this situation is better now also. There are many  
more examples available and the book (http://www.packtpub.com/catalyst-perl-web-application/book 
), while not perfect, is a valuable learning tool.

A naive comparison of Catalyst and CGI::Application dependencies made  
Catalyst look positively bloated and CGI::Application attractively  
svelte however this comparison was unfair - once you looked at all the  
CGI App plug-ins and add-ons we had accumulated the difference was  
nowhere near as stark. It was also seen as advantageous that what we  
considered to be a basic web application stack was distributed and  
tested as a unified release rather than haphazardly across a loose  
federation of 'third-party' modules as with our use of CGI::Application.

Today Catalyst is our default web application framework since we have  
found that it provides the bits of standard infrastructure we had  
previously (re-)written each time or cobbled together from disparate  
sources and it does this without unduly restricting our capacity to  
find more than one way to do things. We have successfully glued  
existing Class::DBI and Alzabo ORMs into our Catalyst apps and have  
been more than happy using DBIx::Class (the de facto Catalyst  
standard) for new projects.

I hope that my very unscientific brain dump is of use.

Adam Clarke

More information about the Catalyst mailing list