繁体   English   中英

将Zope组件注册到GlobalSiteManager有什么意义?

[英]What's the point in registering a Zope component to the GlobalSiteManager?

我正在从以下位置阅读有关zope组件体系结构的出色教程:

http://www.muthukadan.net/docs/zca.html#adapters

我似乎无法理解“ 适配器”一章。

>>> from zope.interface import implements
>>> from zope.component import adapts

>>> class FrontDeskNG(object):
...
...     implements(IDesk)
...     adapts(IGuest)
...
...     def __init__(self, guest):
...         self.guest = guest
...
...     def register(self):
...         guest = self.guest
...         next_id = get_next_id()
...         bookings_db[next_id] = {
...         'name': guest.name,
...         'place': guest.place,
...         'phone': guest.phone
...         }

如果我错了纠正我。 上面的类FrontDeskNG是适配器,对吗? 如文章所述:

FrontDeskNG是IDesk的适配器,可适应IGuest

好的,现在有了适配器,为什么在使用适配器之前必须将其注册GlobalSiteManager

我正在开发手机游戏后端,我想通过签出Zope组件体系结构使代码更具模块化。 我需要使用任何数据库技术交换存储空间并保持代码正常工作的能力。 这似乎是ZCA自豪地宣传的东西。 我从未读过著名的GoF设计模式书,因此请耐心等待。

务实的优势是它允许以下非常酷的代码段;

use_me_like_a_desk = IDesk(instance_of_something_providing_iguest)

除了您想要提供IDesk接口的东西之外,您无需在此指定其他任何东西。 只要您已经注册了将IGuest转换为IDesk的适配器,一切都可以使用。

换一种说法

这可能是最好的示例,但是可以使用注册框架进行许多查询。 例如,您可以只问一下就可以;

我有这个东西,请确保它具有这个界面。

甚至就公用事业而言

请给我提供为我的应用程序提供此接口的东西

好处

通常,每个适配器和实用程序的所有注册都使用zcml针对每个应用程序完成。 这样一来,馅饼就可以轻松地将一个适配器换成另一个适配器,或者使用实用程序的其他实现方式而不必更改大量代码。

更一般地,组件的配准加强了去耦。 您可以构建可以一起工作的多个模块,而不必将它们耦合在一起。 两个模块需要一起工作的唯一事情是一组通用的接口。

这使得编写无缝地协同工作而又彼此不依赖的模块变得异常容易,这反过来又使得无需进行大量重构即可轻松添加,删除,发展和测试新组件。

更多信息

我敢肯定,您已经找到了zope文档的各个部分,并且很难找到。 我想花很长时间才能找到一些概念和它们带来的好处,您能做的最好的事情就是尽可能多地阅读,然后在阿拉斯加的一个山洞里住六个月并进行冥想。

Zope组件体系结构综合指南》是一个好的开始,但我也建议您至少阅读zope.component文档zope.interface文档 特别是这个例子可以帮助您理解好处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM