Alejandro Imass wrote:
Just my $.02

IMHO, the M is correctly defined as is in Catalyst, and you should
definitively keep the Model. Depending on which "business logic" you
are refering to, the code should go in any of Controller, Model (aka
the ORM layer) or the Database.

Furthermore, I think that ORM is just that: clean, powerful,
maintainable access to your database, in fact, anything that pushes
the ORM a bit too far should go IN the database. In practice, you will
find that many of the procedures stored in the model classes will
probably wind up in the databse for performance issues, so what I have
done is set the boundary right there from the beggining (the point
where you feel that you are pushing the ORM a bit too far). Any
complex business logic should always be in the DB (if you are using a
decent database such as PostgreSql, Oracle). The power, encapsulation
and performance gains of using views and rules on a RDBMS like
PostgreSql is without question. Unless you _really_, _really_ have
serious portability issues, and not willing to maintain several sets
of DB code, always consider programming the complex stuff in the DB.

Cheers,
Alejandro

I think maybe I didn't explain myself very well in the early email.

I definitely have Models, but they are a higher-level abstraction than the ORM layer. If I understand your argument, you are advocating that data constraints imposed by your business logic be enforced by the the DB rather than the ORM. That's all fine and good, but MUCH lower level than what I have in my Catalyst Models.

I usually have an architecture like this:

Client -> Controller -> Model -> ORM -> Database

The ORM is usually just vanilla (as you suggested), the Database enforces simple data constraints (foreign keys, etc) and the Model makes sure that the complex business logic constraints are met. Some things are simply not enforceable by a stored procedure - this might involve validation of image files for example.

The beauty of Catalyst is that it's up to you how to handle separation of concerns and Catalyst is helpful no matter how you do.

Best,
Brian

_______________________________________________
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/

Reply via email to