[Zope-dev] improving the utility and adapter lookup APIs

Tres Seaver tseaver at palladion.com
Wed Nov 25 13:34:31 EST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Gary Poster wrote:
> On Nov 25, 2009, at 11:17 AM, Thomas Lotze wrote:
> 
>> Martijn Faassen wrote:
>>
>>> Adapter:
>>>
>>> IFoo(x)
>> [...]
>>
>>> Multiadapter:
>>>
>>> IFoo.multi(x, y)
>> [...]
>>
>>> Utility:
>>>
>>> IFoo.utility()
>>>
>>> [or possibly IFoo() instead?]
>> What about a simple and consistent API for all components including
>> utilities, adapters and multiadapters:
>>
>> IFoo()
>> IFoo(x)
>> IFoo(x, y)

You can't use an arbitrary number of positional arguments for the
contexts, because we need to support the named / default cases too.

>> I seem to remember there had been some discussion at some point about
>> dropping or at least loosening the distinction between utilities and
>> adapters anyway, so this would be the opportunity to do so at the API
>> level.
> 
> That was discussed and rejected near the very beginning of the Z3
> effort, in my memory.  They are too different.  Our use of adapters
> generally involves looking something up and automatically calling it.
> Our use of utilities generally involves simply looking something up
> and returning it.

It doesn't matter *to the caller* how the adapter / utility lookup
works, which is why making the spelling regular for the caller is a good
idea.  The caller doesn't know any different in the zope.component API:

  getUtility(IFoo)
  getAdapter(context, IFoo)

They are both lookups, from the caller's perspective.  Why should the
caller care that the adapter lookup finds a factory and calls it, while
the utility lookup (typically) finds a global singleton?


Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAksNeLcACgkQ+gerLs4ltQ6F9gCfXooovAG8fAKZtxL06++hPP/9
8H4AoITGogG8Mv4rg2M/FR1cyyOUZwFk
=b2h1
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list