I've ran into the same issue, but solved it in a bit of a hackish fashion. I went the route of the schema objects knowing nothing about the outside world, just themselves, and their relations with other schema objects.

On top of this sits a separate set of objects that contain all the logic necessary to make things "work", using copious amounts of autoload voodoo. These objects can basically be used from any other app, be it Catalyst or some command line tool, and don't really have to know much else. For Catalyst I've got a custom model object that will return the appropriate "logic" object, whereas in offline tools they're used directly.

Sort of solves the problem in a cleaner way if you ask me.


Ido Perlmuter wrote:
Hi everyone.

I've been racking my brain trying to find a way to automatically pass an object, for the matter the Catalyst::Request object, to DBIx::Class methods. I cannot and will not pass it myself every time I call a method in my schema. While I do believe the model and the app should be completely separated, further information must flow between the two.

For example, I need to setup an administrative usage log for my app. Whenever a user with proper privileges invokes a schema method that creates, edits or deletes information from the database, I want that action to be automatically recorded in the usage log, with details such as the user ID and the user IP. I'm facing two difficulties: on one hand I believe this should be automatically done by the schema (so recording into the usage log will not be made from the app, but from the schema), but that means I need to pass the context object (or the Request object) to every schema method I invoke; on the other hand, if I let the app handle recording into the usage log, my schema loses power. What if I want to write an API to my program in several programming languages, should they do the same too?

So for a while now I've been trying to find a way to automatically pass objects to the schema. Maybe if DBIx::Class was Moose-based I would have already found one using method modifiers.

Any thoughts will be appreciated.

Thanks,
Ido Perlmuter.
------------------------------------------------------------------------

_______________________________________________
List: [email protected]
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/

--
Ben van Staveren
phone: +62 81 70777529
email: [email protected]

_______________________________________________
List: [email protected]
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/

Reply via email to