[Zope-dev] zope.globalrequest?
Martijn Faassen
faassen at startifact.com
Mon Jan 19 10:07:11 EST 2009
Hi there,
Roger Ineichen wrote:
[snip]
> Why should someone use a global request if he has a request
> available? This package does nothing else then offer a request
> if non is available. And if you need a request if non is available
> there is something wrong with the application design. Or better
> let's say it's another pattern then we use in zope 3 right now.
I don't think that's always true.
Let me give you an example. I wrote a library called hurry.resource.
This library is framework neutral. You can define a javascript or css
resource and express that you need it to be included in the page in a
certain code path:
yui.datatable.need()
I also have a library called hurry.zoperesource. This library provides
integration of hurry.resource with Zope 3. When need() is called in a
Zope 3 context, I need the request object as I chose the request object
as the place to store the list of resources that are needed. So I need
to get the request without having it.
You could argue my library isn't designed right, and that instead I
should require people to pass 'request' to the .need() method. But since
hurry.resource is framework-neutral, what request should that be? And in
a system like Pylons it makes no sense to have to pass in the request,
as it's available globally everywhere. It only seems to put an
implementation detail into the API.
Besides the framework neutralness argument, which you can argue makes no
sense, I think it's simply a nicer API to say '.need()' instead of
having to pass the request. That's a weaker argument, however. That
said, zc.resourcelibrary does the same strategy, as that's where I took
it from.
Anyway, I do believe there are cases of APIs that need the request
internally but want to abstract it away as an implementation detail. I
guess I might've been able to use the interaction directly in Zope 3's
case and I shall study that.
There are of course drawbacks (as mentioned) with testing and such when
taking this approach. But I think one can make a reasonable case for
such an API nonetheless, when used in moderation.
Regards,
Martijn
More information about the Zope-Dev
mailing list