[Zope-dev] implementing zope.component 4.0
Charlie Clark
charlie.clark at clark-consulting.eu
Sat Nov 28 10:39:51 EST 2009
Am 28.11.2009, 16:06 Uhr, schrieb Martijn Faassen <faassen at startifact.com>:
>> I have to agree with this. IFoo(myobject) is not intuitive. I know it
>> used
>> a lot because it's convenient shorthand but I've never read anywhere
>> that
>> interface classes are, in fact, callables. We certainly don't normally
>> treat them as such.
Hi Maartijn,
> It's quite intuitive to me..
> Compare it with plain python:
> >>> int(something)
> or:
> >>> str(something)
> >>> len(something)
> You say "give me something that's an int for the argument", or "give me
> something that's a string for the argument". You don't care how it
> accomplishes it, as long as it gives the right value back.
> It's even like adapters in the following way:
> >>> int(1)
> Gives back the object itself, as it already is an int.
> >>> int('1')
> >>> int(1.5)
> Int is also "registered for" strings and floats, but essential different
> styles of "adaptation" happen there.
So adapters are reduced to type conversion?
> Calling an interface is really very similar to this.
> The main difference is that we don't use the concrete implementation's
> factory but that we use the interface that specifies the abstract
> behavior. That is a difference, but doesn't seem to be a huge step in my
> mind.
Thanks for the comparison but it is semantically so different and
interfaces can be used for things other than adapters that I disagree. The
most common example I know of the syntax is with INameChooser() which
brings us back to the differences (real or imaginary) between utilities
and adapters.
>> One of the things that I have grown to appreciate with the ZCA is the
>> advantage of spelling out the relationship between objects and I'll
>> happily take a little verbosity over magic.
> It's not verbosity versus magic. It's a better API versus a worse API.
>> The discussion does highlight a key source of confusion about Zope
>> interfaces: they are, at the same time, an object specification and a
>> kind
>> of name tag or token that objects can provide upon request. While I know
>> that the second function is derived from the first it is conceptually
>> different.
>>
>> My preference, for the sake of clarity:
>>
>> adapted = an_easy_way_to_the_registry.adapt(*objects_to_be_adapted,
>> **identifiers)
> I'm not sure how this is supposed to work; what is identifiers?
That makes two of us! ;-) "identifiers" would be the key components -
Interface/Tag (which is how I think of them in this context) and possibly
name.
>> That adapters are all callable now seems to be an accepted convention,
>> presumably from convenience. But my understanding of adapters does not
>> imply this.
> I hope to have shown to you above that my understanding of adapters does.
It's quite likely that I'm wrong in this but I see great potential using
adapters for delegation rather than straight conversion. I have very much
come to appreciate the power of this delegation in, say, BrowserViews;
even if it did take me several months to understand the multiadapter
pattern!
Because I do, repeatedly, make simple mistakes with the adapter, utility
(wrong name, wrong signature) stuff I very much appreciate attempts to
simplify and clarify the API. But I will greet them the same poor grasp of
the underlying concepts than I did the originals!
Charlie
--
Charlie Clark
Managing Director
Clark Consulting & Research
German Office
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-600-3657
Mobile: +49-178-782-6226
More information about the Zope-Dev
mailing list