[Catalyst] Re: Private Chained Actions?

Jonathan Rockway jon at jrock.us
Sun Jun 22 14:24:30 BST 2008


* On Fri, Jun 20 2008, Aristotle Pagaltzis wrote:
> * Jonathan Rockway <jon at jrock.us> [2008-06-20 22:20]:

>> Yeah, that's ugly.  What you really want are method modifiers:
>> 
>>     package MyApp::Controller::Foo;
>>     use Moose;
>>     BEGIN { extends 'Catalyst::Controller' };
>>     
>>     sub main_page :Path Args(0) {
>>         my ($self, $c) = @_;
>>         $self->hello($c);
>>     }
>>     
>>     sub hello {
>>         my ($self, $c) = @_;
>>         $c->res->body('hello! setup is'. $c->stash->{setup});
>>     }
>>     
>>     before hello => sub {
>>         my ($self, $c) = @_;
>>         $c->stash->{setup} = 'done';    
>>     };
>>     
>>     1;
>
> That’s even uglier. Imagine there isn’t just `hello` but half a
> dozen other methods all sharing the same setup. So the setup code
> is one or two screens down the source file. Now when you look at
> `hello` you have absolutely no indication whatsoever that there
> might be other code running before it.

I guess.  But this is Perl, there's never any indication of anything.
There's no indication that my function is receiving arguments of a
particular type.  There's no indication that my function throws
exceptions.  There's no indication that "use Foo" has side effects.
Even in Catalyst, there is a ton of implicit behavior.  There is no
indication that begin/end/auto applies to my action (at least until the
action runs).

So in other words, I disagree with you.  I use method modifiers all the
time, and I (and others) have no problem maintaining code.  If you want
ultimate verbosity, just call hello_setup from hello.  If you think you
can keep a few method modifiers straight in your head, then use the
Moose approach.

TMTOWTDI.

> Note that using method modifiers instead of Cat dispatch means
> that the Catalyst::Stats breakdown of a request will be coarser.

The less my web framework does for me, the better.  If I want profiling,
I'll use DashProfiler.

Regards,
Jonathan Rockway

-- 
print just => another => perl => hacker => if $,=$"



More information about the Catalyst mailing list