<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Future Post: Compare and Contrast CGIApp and Catalyst</title>
	<atom:link href="http://blog.afoolishmanifesto.com/archives/762/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.afoolishmanifesto.com/archives/762</link>
	<description>fREWdiculous!</description>
	<lastBuildDate>Mon, 16 Aug 2010 06:30:20 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Compare and Contrast CGIApp and Catalyst &#124; A Foolish Manifesto</title>
		<link>http://blog.afoolishmanifesto.com/archives/762/comment-page-1#comment-182</link>
		<dc:creator>Compare and Contrast CGIApp and Catalyst &#124; A Foolish Manifesto</dc:creator>
		<pubDate>Fri, 12 Jun 2009 04:03:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.afoolishmanifesto.com/?p=762#comment-182</guid>
		<description>[...] may remember my post from before asking about the differences between these two frameworks. I only got a couple of responses, but [...]</description>
		<content:encoded><![CDATA[<p>[...] may remember my post from before asking about the differences between these two frameworks. I only got a couple of responses, but [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt S Trout</title>
		<link>http://blog.afoolishmanifesto.com/archives/762/comment-page-1#comment-172</link>
		<dc:creator>Matt S Trout</dc:creator>
		<pubDate>Sat, 06 Jun 2009 16:40:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.afoolishmanifesto.com/?p=762#comment-172</guid>
		<description>Mostly, that any sufficiently large CGI::App codebase appears to contain an ad hoc, informally-specified, bug-ridden implementation of half of Catalyst.

Having a solid HTTP abstraction with IOC capabilities and a standard component API is important - and CGI::App&#039;s plugin system is a lot more limited than the many places you can override, tweak and extend Catalyst.

Catalyst doesn&#039;t just have lots of extensions because everybody uses it - it got many of those users because there were plenty of clean ways to make those extensions in order to build your application base up towards the problem in a maintainable fashion.

The way I see it, CGI::App is (intentionally) a microframework; Catalyst is more a metaframework. So for an application of ... half a dozen pages? CGI::App may be the best choice to minimise the amount of code loaded, but for a larger app you usually end up taking advantage of enough of the features of Catalyst to make it worth starting there.</description>
		<content:encoded><![CDATA[<p>Mostly, that any sufficiently large CGI::App codebase appears to contain an ad hoc, informally-specified, bug-ridden implementation of half of Catalyst.</p>
<p>Having a solid HTTP abstraction with IOC capabilities and a standard component API is important &#8211; and CGI::App&#8217;s plugin system is a lot more limited than the many places you can override, tweak and extend Catalyst.</p>
<p>Catalyst doesn&#8217;t just have lots of extensions because everybody uses it &#8211; it got many of those users because there were plenty of clean ways to make those extensions in order to build your application base up towards the problem in a maintainable fashion.</p>
<p>The way I see it, CGI::App is (intentionally) a microframework; Catalyst is more a metaframework. So for an application of &#8230; half a dozen pages? CGI::App may be the best choice to minimise the amount of code loaded, but for a larger app you usually end up taking advantage of enough of the features of Catalyst to make it worth starting there.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomas Doran</title>
		<link>http://blog.afoolishmanifesto.com/archives/762/comment-page-1#comment-171</link>
		<dc:creator>Tomas Doran</dc:creator>
		<pubDate>Sat, 06 Jun 2009 00:02:02 +0000</pubDate>
		<guid isPermaLink="false">http://blog.afoolishmanifesto.com/?p=762#comment-171</guid>
		<description>The main thing which has always attracted me to Catalyst is the flexibility of the ways in which you can arrange paths in your application, and the fact that path definitions are intrinsic to your controllers, rather than having an external &#039;route map&#039; of some form.

With Catalyst 5.8 and Moose, this has got undescribeably powerfull (although I&#039;m trying to work up to showing some really cool use cases in my blog).

As a simple case, if you have a CRUD system, then attaching standard view/edit/delete uris (and associated processing) should be as simple as:

with qw/MyApp::IsViewable MyApp::IsEditable MyApp::IsDeleteable/;

sub item : Chained(&#039;/&#039;) PathPart(&#039;thing&#039;) CaptureArgs(1) {
    my ($self, $c, $id) = @_;
    $c-&gt;stash-&gt;{item} = $c-&gt;model(&#039;Db::Thing&#039;)-&gt;find($id);
}

and this gives you:
/thing/ (GET to view)
/thing/ (POST to edit)
/thing//delete (POST for web)

You can add extra custom actions to the URI space of &#039;thing&#039; just by including them in the code above - but the basic elements of your web interface are really really to write once, and then just reuse..</description>
		<content:encoded><![CDATA[<p>The main thing which has always attracted me to Catalyst is the flexibility of the ways in which you can arrange paths in your application, and the fact that path definitions are intrinsic to your controllers, rather than having an external &#8216;route map&#8217; of some form.</p>
<p>With Catalyst 5.8 and Moose, this has got undescribeably powerfull (although I&#8217;m trying to work up to showing some really cool use cases in my blog).</p>
<p>As a simple case, if you have a CRUD system, then attaching standard view/edit/delete uris (and associated processing) should be as simple as:</p>
<p>with qw/MyApp::IsViewable MyApp::IsEditable MyApp::IsDeleteable/;</p>
<p>sub item : Chained(&#8216;/&#8217;) PathPart(&#8216;thing&#8217;) CaptureArgs(1) {<br />
    my ($self, $c, $id) = @_;<br />
    $c-&gt;stash-&gt;{item} = $c-&gt;model(&#8216;Db::Thing&#8217;)-&gt;find($id);<br />
}</p>
<p>and this gives you:<br />
/thing/ (GET to view)<br />
/thing/ (POST to edit)<br />
/thing//delete (POST for web)</p>
<p>You can add extra custom actions to the URI space of &#8216;thing&#8217; just by including them in the code above &#8211; but the basic elements of your web interface are really really to write once, and then just reuse..</p>
]]></content:encoded>
	</item>
</channel>
</rss>
