Martijn Faassen wrote: > Chris McDonough wrote: >> Chris McDonough wrote: >>>> If some set of ZCA APIs made it the responsibility of the *caller* to >>>> invoke >>>> the adapter with arguments would go a long way between normalizing the >>>> difference between utilities and adapters (because they would essentially >>>> then >>>> be the same thing). >> The very core mechanics of how a component registry behaves resides almost >> entirely in the zope.component.registry module. >> >> It would be useful to split these core mechanics into a separate package. >> Here's why: >> >> - The zope.component module carries along an expectation of a particular >> global >> API. This global API is not required to use the mechanics of the >> underlying >> registry machinery. >> >> - The zope.component package has a number of features that are irrelevant >> to the operation of the core registry itself, such as persistence and >> security. >> >> - The registry itself is useful outside the context of the zope.component API >> package; the API is essentially just "candy" on top of the registry >> itself. >> >> I have created such a package at >> http://svn.zope.org/Sandbox/chrism/zope.registry >> >> It contains an implementation of the registry and the tests for the registry >> object. It depends on zope.interface and zope.event. I'd like to actually >> remove the zope.event dependency and release a newer version of zope.event >> that >> uses a global inside zope.registry as the list of registered object (reverse >> the dependency). >> >> After that's done, I'd suggest we make zope.component depend on >> zope.registry. >> >> At this point, people can innovate with their own APIs to the registry >> object >> as necessary; they needn't carry along the baggage of the expecation of the >> older zope.component API working in their app. > > One of my first responses would be some worry about zope.component > growing a *new* dependency. The goal of zope.component is that it's one > of those packages with only a few... > > I'm trying to see who would be using zope.registry for what exactly. > Would it be much harder to experiment with these new APIs on top of > zope.component? You'll get a bit more baggage, but the minimal > dependency story should be quite small already. I'd rather get some of > the additional dependencies (that have a lot to do with supporting ZCML) > out of it, instead of moving its core functionality out.
I guess this was just a way of trying to draw a line between "the component architecture" (and the conceptual baggage which surrounds it) and useful machinery that currently is hidden inside of it that really should have a life of its own. It's obviously not the only way to do that. It tries to address the following problem. Currently people seem to get wrapped around the axle and confused by the purpose of "the ZCA", which currently implies at least two different things: - Machinery to perform complex registrations and lookups using interfaces in the form of a registry. - A global API that presents a view of the world: "there are these things called utilities and adapters, and this API is how you do adaptation and utility lookup". These two things are conceptually distinct. It shouldn't be necessary to need to understand the concept of "utility" and "adapter" to use a registry. A registry is just machinery that uses interfaces as registration markers for the benefit of later arbitrary lookups, not necessarily just for "finding utilities" or "finding and calling adapter factories". For instance, you might use the registry to register some callable that accepts *no* arguments with, say, two "requires" arguments. You shouldn't need to call this an "adapter", because it's not one; you just want to register something and get it back when you ask nicely. The API of a registry should be able to evolve separately from the API of its consumers (the global ZCA API is only one consumer). The current registry API permits the concepts of utility and adapter to bleed into the implementation, but this needn't be the case forever. We could provide (and document) a very simple registry base class with a normalized API that didn't have any of this conceptual baggage; it would be extremely popular, I think. Likewise, it should be possible to use a different registry implementation to service the ZCA global API. This is possible right now via getSiteManager.sethook, of course. > You factored various related things together - perhaps it would make > sense to do this refactoring within zope.component? > > I'm +1 on making zope.event part of zope.component and deprecating > zope.event. > > Speculating, would it instead make sense to move zope.registry > functionality into zope.interface? The only additional dependency is > zope.event. At first glance the answer would be "no" as it really > introduces various component architecture concepts... It might make sense to me to put a very simple component registry in zope.interface: it already has the concept of "adapter" baked in. - C _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )