[Catalyst] Shoot out -- Catalyst / RoR / Other MVC apps --

Dave Rolsky autarch at urth.org
Wed May 9 16:02:19 GMT 2007


On Wed, 9 May 2007, Peter Karman wrote:

>> My experience tells me that lots of subclassing is a bad smell. Delegation 
>> is often simpler and less fraught with possibility for name conflicts.
>
> What do you mean by delegation?

Delegation is "has-a" relationships, as opposed to "is-a".

Here's a practical Catalyst example of both subclassing and delegation in 
action together.

In the big Catalyst project I'm working on now, I wanted to have some 
custom accessors in my response object. These are things which are 
specific to my app, like breadcrumbs.

I have a very minimal Response subclass that simply adds some accessors:

  package VegGuide::Response;

  use base 'Catalyst::Response';
  __PACKAGE__->mk_accessors( 'alternate_links', 'breadcrumbs', 'keywords' );

That's the subclassing piece. The delegation is that rather than implement 
the functionality of breadcrumbs in the response object, the breadcrumbs 
accessor simply returns a VegGuide::Breadcrumbs object.

On a side note, Catalyst plugins as a rule seem to jam _way_ too many 
methods into the things they extend (the session plugin is truly 
egregious). Some day I'd like to write a version of the session plugin 
that adds one method to the core Catalyst object, session(), and all the 
rest of the methods would be available via the object returned from 
session().


-dave

/*===================================================
VegGuide.Org                        www.BookIRead.com
Your guide to all that's veg.       My book blog
===================================================*/



More information about the Catalyst mailing list