![](/img/trans.png)
[英]Does a Zope Component Architecture component need to state the interfaces it implements?
[英]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.