[Zope3-dev] EventService, references, and subscription semantics
Jim Fulton
jim@zope.com
Tue, 26 Feb 2002 17:16:22 -0500
"Phillip J. Eby" wrote:
>
> [dropping the Transwarp list from this sub-thread, since it's only about
> the Zope Component Architecture issues]
>
> At 12:54 PM 2/26/02 +0000, Steve Alexander wrote:
> >Phillip J. Eby wrote:
> >>Okay, maybe I'm missing something, but it seems to me like the simplest
> >>decomposition would be:
> >>1. 'IReferenceable' - interface with a 'getReference()' method, returns a
> >>reference to the referencable thing.
> >>2. 'IReference' - subclass of IReferenceable, whose implementations'
> >>'getReference()' methods return 'self'. Includes a 'dereference()'
> >>method, as well as '__eq__()' and '__hash__()' (general comparison
> >>doesn't really make sense for references, but dictionary lookup and
> >>equality checking would be useful). 'IReference' objects should be
> >>immutable and pickle-able, but should probably *not* be Persistent (the
> >>overhead would be wasteful).
> >>3. Things that need references, use 'getAdapter()' to get an
> >>'IReferenceable' implementation for the thing they want a reference to.
> >>4. You're done. :) Since 'IReference' is a subclass of 'IReferencable',
> >>if you were passed a reference, you've got what you need. If you didn't
> >>have a reference, then you'll get something that can give you one. All
> >>the lookup policies that y'all are talking about can be encapsulated in
> >>the adapter that implements IReferenceable, and configured via the normal
> >>channels. If 'getAdapter()' is insufficiently placeful, make the adapter
> >>do placeful lookups and delegate to the appropriate authorities.
> >
> >[snip]
> >
> >I don't think this covers having a manager in an object's context provide
> >its reference.
>
> Such a facility can be encapsulated in an adapter that provides
> 'IReferenceable'; it doesn't need to be (and IMHO shouldn't be) in the core
> usage pattern. An object which wants an 'IReference' should be insulated
> as much as possible from the mechanics of *how* to get it. The how is a
> policy, and therefore should be *behind* an interface, not in front of it,
> if you see what I mean.
I agree.
> It may be that 'getAdapter()' is insufficiently placeful to make this
> work. My understanding was that 'getAdapter()' was intended to be
> placeful,
Yes.
> but last I looked at the Z3X code base, it was placeless. I
> don't know if the intention is to correct that, long term, or whether my
> understanding of the intent or plans is flawed.
We haven't gotten to implementing TTW adapters, but we will.
Jim
--
Jim Fulton mailto:jim@zope.com Python Powered!
CTO (888) 344-4332 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org