[TransWarp] Proposing API changes to peak.binding, et al
Phillip J. Eby
pje at telecommunity.com
Tue Jun 17 14:27:42 EDT 2003
I've begun the process of refactoring the binding framework to better
support things like adaptation and "suggesting" parent components, as well
as removing redundant interfaces, introspection, etc.
As part of this process, I'd like to streamline all binding constructs to
use keyword arguments to describe any "standard" attributes of a
binding. For example, attribute name, documentation, interface to adapt
to, and "activateUponAssembly" should all become keyword arguments, that
are the same for every kind of binding. Many of these bindings now accept
positional arguments for some or many of these items; I'd like to remove
this support.
While doing this, I'd like to change the 'provides' keyword argument
spelling. The term "provides" is now fairly well established as referring
to what protocols/interfaces an object provides. But the 'provides'
keyword doesn't declare what the attribute provides, it declares what
configuration key(s) its component wants to publish it under, for the
component and its subcomponents to use. Also, for historical reasons, the
current mechanisms supporting this check to see if 'provides' is a tuple,
and if so, iterate over it.
I'd like to change the name to something that better describes its
function, like 'publishForKeys', 'supplyAsKeys', or something like
that. I'd also like to required that the value always be a sequence, so
that introspection is unnecessary. (The original "nested tuple" support
was for compatibility with __implements__, but it turned out in practice
that we never really wanted to publish a component as a utility for
whatever interfaces it might implment.) I'm open to suggestions as to a
better name, but would like to get this settled today if possible.
I'd also like to find out if anybody is actually using the 'useSlot'
capability of peak.model StructuralFeatures. I'm beginning to think that
this is actually a YAGNI, and I see a way to clean up some related things
if I can get rid of it, at least for a while. Ultimately, I'd like
StructuralFeatures to have more in common with peak.binding attributes,
possibly including the ability to cache a computed value, and I'd like to
get rid of some of the duplicated/overlapped infrastructure between the two.
And speaking of getting rid of things, I'm considering ditching
'bindToParent', 'bindToSelf' and 'bindToUtilities'. The former two are
redundant, in that 'bindTo("..")' and 'bindTo(".")' do the same
things. TSBO-APOO-WTDI (There's should be one -- and preferably only one
-- obvious way to do it.) 'bindToUtilities()' was used for only one thing
in PEAK and was later ditched. And even the thing it was originally
created for is likely to go away...
That thing is objectFactories and stateFactories for naming contexts. If
we use adaptation instead of utilities for serializing/deserializing
objects, these are no longer needed.
More information about the PEAK
mailing list