[Catalyst] The model -is- where your business logic lives.

Pedro Melo melo at simplicidade.org
Fri Sep 28 10:58:20 GMT 2007


Hi,

On Sep 28, 2007, at 8:55 AM, Ian Docherty wrote:

> MyCompany::MyApp::Controller
> MyCompany::MyApp::View
> MyCompany::MyApp::Model
> MyCompany::MyApp::Schema (where my ORM goes)
> MyCompany::MyApp::Logic (where my other business logic goes)
>
> I originally created the 'Logic' namespace because I was using  
> load_classes and by default my Schema directory had all my ORM  
> result_source files.
>
> However I am just in the process of changing to using  
> load_namespaces so I now have
>
> MyCompany::MyApp::Schema::Result (where I have moved all my  
> result_sources to)
> MyCompany::MyApp::Schema::ResultSet

I travelled the same path: I started with split Logic and Schema  
classes and move them all together with load_namespaces. It works  
fine, and thats the approach I recommend around here.

> leaving  MyCompany::MyApp::Schema empty of classes.
>
> So I presume I can consider the MyCompany::MyApp::Schema namespace  
> to be for my business logic that does not directly map onto a ORM?  
> (I can't think of a good example off-hand.)

I would defer that decision until you get a good example :)

> One final point that I am not sure I have right.
>
> In my business logic I have certain constraints (for example the  
> maximum length of a web-form field, e.g. username) and most of the  
> time this constraint is defined by the database (the field length  
> of the user.username). Now the template needs access to these  
> values to display the appropriate error message so typically I do  
> the following in my controller.

You have attributes in the add_columns() to store all that. And if  
you do store them all in there, you can use  
DBIx::Class::Schema::deploy as a added bonus.

See:

  * deploy: http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/ 
Schema.pm#deploy
  * add_columns: http://search.cpan.org/dist/DBIx-Class/lib/DBIx/ 
Class/ResultSource.pm#add_columns

Best regards,
-- 
Pedro Melo
Blog: http://www.simplicidade.org/notes/
XMPP ID: melo at simplicidade.org
Use XMPP!





More information about the Catalyst mailing list