0

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 は、IGuest を適応させる IDesk のアダプターです。

さて、これでアダプターができました。使用する前に に 登録する必要があるのはなぜですか?GlobalSiteManager

私はモバイル ゲームのバックエンドに取り組んでおり、Zope コンポーネント アーキテクチャを調べて、コードをよりモジュール化したいと考えています。ストレージをあらゆるデータベース テクノロジと交換し、コードを引き続き機能させる機能が必要です。これは、ZCA が誇らしげに宣伝しているように思えました。有名な GoF Design Patterns の本を読んだことがないので、ご容赦ください。

4

1 に答える 1

2

実用的な利点の 1 つは、次の非常にクールなスニペットを使用できることです。

use_me_like_a_desk = IDesk(instance_of_something_providing_iguest)

IDesk インターフェースを提供するものが必要であるという事実を除けば、何も指定する必要はありません。IGuest を IDesk に変換するためのアダプターを登録している限り、すべてが機能します。

言い換えると

これはおそらく最も良い例ですが、登録フレームワークを使用して作成できるクエリがいくつかあります。たとえば、単に尋ねることができます。

私はこれを持っています。このインターフェースがあることを確認してください。

またはユーティリティの場合でも

私のアプリケーションにこのインターフェースを提供するものを教えてください

利点

多くの場合、さまざまなアダプターとユーティリティのすべての登録は、zcml を使用してアプリケーションごとに行われます。これにより、大量のコードを変更することなく、あるアダプターを別のアダプターに交換したり、ユーティリティの別の実装を使用したりすることが非常に簡単になります。

より一般的には、コンポーネントの登録はデカップリングを強化します。複数のモジュールを結合しなくても、連携して動作する複数のモジュールを構築できます。2 つのモジュールが連携して動作するために必要なものは、共通のインターフェイス セットだけです。

これにより、相互に依存することなくシームレスに連携するモジュールを非常に簡単に作成できるようになり、大規模なリファクタリングを行うことなく、新しいコンポーネントの追加、削除、進化、テストが容易になります。

詳しくは

ご存知のように、さまざまな Zope ドキュメントが散らばっており、見つけるのが困難です。いくつかの概念とそれらがもたらす利点をクリックするのに長い時間がかかると思います.あなたができる最善のことは、できる限り読んでから、アラスカの洞窟に6か月住んで瞑想することです.

Zope コンポーネント アーキテクチャの総合ガイドは良い出発点ですが、少なくともzope.component docszope.interface docs を読むこともお勧めします。特に、この例は利点を理解するのに役立つかもしれません

于 2013-10-15T14:06:28.240 に答える