On Thu, Sep 27, 2007 at 11:51:26AM +0100, Ian Docherty wrote: > In a previous thread, Matt S Trout said. > > >The model -is- where your business logic lives. > > > >The real question is whether your ORM should be directly in the model or > >not, but that's a whole different thread. > > Based on this I have the following simple code. > > #### > package MyApp::Model::DBIC; > > use strict; > use base qw(Catalyst::Model::DBIC::Schema); > > #### > package MyApp::Schema::Demo; > > use base qw(DBIx::Class); > > __PACKAGE__->load_components(qw(PK::Auto Core)); > __PACKAGE__->table('demo'); > __PACKAGE__->add_columns(qw(id name state)); > __PACKAGE__->set_primary_key('id'); > > > #### > package MyApp::Model::DBIC::Demo;
Put this code in MyApp::Schema::Demo. I often call it e.g. MyApp::DataStore or MyApp::Domain to remind me that it's the business layer and the DBIC-ness is merely incidental. > sub do_some_business_logic_stuff { > my ($self) = @_; > > if (<some complicated business logic>) { > $self->state('pending'); > $self->update; > } > } > > > #### somewhere in my application > > $demo = $c->model('DBIC::Demo')->find($index); > $demo->do_some_business_logic_stuff; > > ------------- > > Is this a standard/typical/best-practice way to do this sort of thing? > > It seems to me that if I want to use the business logic in an external > application (cronjob) then I am having to use the MyApp::Model::DBIC::Demo > namespace as decreed by Catalyst (not that this is a big issue). Having moved the logic out of MyApp::Model:: this ceases to be an issue. Don't confuse class -names- with the nature of classes. MyApp::Model:: is *adapters* that make a model available to MyApp, not where your domain model logic itself should live. I usually these days have MyApp::Web for the catalyst app instead of MyApp so I can deploy things like MyApp::DataStore from a separate dir tree. -- 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.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/