[Grok-dev] Re: final sprint report - please review my branch!

Philipp von Weitershausen philipp at weitershausen.de
Tue Apr 8 16:51:37 EDT 2008


Martijn Faassen wrote:
> Philipp von Weitershausen wrote:
> [snip]
>> I'm not really worried about that. I'm worried about making people 
>> subclass something at all. It'll hinder the reusability of the 
>> grokcore.component package.
>>
>> For Grok-the-webframework, it's absolutely fine making people subclass 
>> a specific class to gain functionality (grok.Model, grok.View, etc.), 
>> but the supposedly-reusable packages shouldn't have to do that.
> 
> It's a mixin that doesn't actually do anything though, and it's dead 
> simple. Since grokcore.component is about subclassing anyway (Adapter, 
> GlobalUtility, MultiAdapter), I'd say this is perfectly acceptable.

It is as long as you're fine with actually creating new classes. If 
you'd want to make existing classes implicit contexts, you're out of luck.

> If we take another approach, it'll have to compete in briefness with:
> 
> class MyObject(Context):
>    pass
> 
> class MyAdapter(Adapter):
>    pass
> 
> If we're concerned about subclassing, we can eventually expand Martian 
> with the facility to recognize classes by interface as well:
> 
> class MyClass(object):
>    grok.implements(IGrokContext)
> 
> I think this could then even be used to implement the base classes we 
> have now (which I think are actually more readable):
> 
> class Context(object):
>    grok.implements(IGrokContext)
> 
> I think such a thing is neat but of limited benefit, but it's something 
> to thin about. Until we have such a thing, let's just stick with Context.

I like the IGrokContext idea. It's just as simple as subclassing 
'Context' (which we can still leave around). Sounds like a win-win solution.

>>> Are you thinking of, instead, introducing a directive with which
>>> application stacks would mark up their classes as being eligible to be
>>> automatically detected as adapter contexts?  Maybe grok.autodetect()
>>> or something?
>>
>> Yes, something like that. We won't be able to grok them because we 
>> can't grok before we grok ;). Rather, I have some very simple 
>> registration in mind that'll be part of the *meta* configuration 
>> (meta.zcml). I need to write down a story for this first, though.
> 
> Please. I think you're going to have a hard time engineering something 
> better than the elegant solution we already have. Going for a 
> registration approach sounds way more complicated and I don't see any 
> benefits so far. It also presupposes ZCML being used, which 
> grokcore.component shouldn't have to require from a programmer who wants 
> to use it.

True


More information about the Grok-dev mailing list