On Wed, Oct 24, 2007 at 12:52:21PM -0700, Bill Moseley wrote: > On Wed, Oct 24, 2007 at 07:10:09PM +0100, Matt S Trout wrote: > > > The C::P::Server::XMLRPC plugin allows adding attributes to existing > > > controllers, so you can do: > > > > > > sub user_detail : Local : XMLRPC { > > > my ( $self, $c, $user_id ) = @_; > > > > > > # validate user_id and place user object in stash. > > > > > > } > > > > Yes, and I'm saying that that's cute and all, but don't do that. > > Why don't you like that?
Because dealing with N parameter types becomes messy really quickly. Using OO + polymorphism is much more elegant. > > If you want to share controller code, use a common base class. > > Ok, but In which way? > > So, there's a bunch of existing actions spread around a handful of > controllers. Now you want to add in XMLRCP where each request must > alter in the input parameters to use the existing controller code. > > Do you create new controller classes just for the XMLRPC requests > where they rearrange the parameters and then call the web controller > action? > > Or do you factor out the common code into a base class for each > controller and then have web and XMLRPC (and what ever else comes > along) to handle those requests? > > package App::Controller::User; > use Base 'App::Contoller::User::Base'; > > sub user_detail : Local { > my ( $self, $c, $user_id ) = @_; > return $self->fetch_user_detail( $c, $user_id ); > } > > package App::Controller::XMLRPC::User; > use Base 'App::Contoller::User::Base'; > > sub user_detail : XMLRPC { > my ( $self, $c ) = @_; > my $user_id = $c->req->params->{user_id}; > return $self->fetch_user_detail( $c, $user_id ); > } Pretty much exactly that. Bit more typing up front but much easier to maintain and test. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Director http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/ http://www.shadowcat.co.uk/servers/ _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[EMAIL PROTECTED]/ Dev site: http://dev.catalyst.perl.org/