Какой смысл регистрировать компонент Zope в GlobalSiteManager?

Я читаю удивительный урок об архитектуре компонентов zope из:

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

Я не могу понять главу Адаптеры.

>>> 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 Component Architecture. Мне нужна возможность поменять свое хранилище с любой технологией баз данных, чтобы код по-прежнему работал. Это казалось чем-то, что ZCA с гордостью рекламирует. Я никогда не читал знаменитую книгу GoF Design Patterns, поэтому, пожалуйста, потерпите меня.

1 ответ

Решение

Одним из прагматических преимуществ является то, что он позволяет следующий очень крутой фрагмент;

use_me_like_a_desk = IDesk(instance_of_something_providing_iguest)

Вам не нужно было ничего там указывать, кроме того, что вы хотите что-то, что обеспечивает интерфейс IDesk. Пока вы зарегистрировали адаптер для преобразования IGuest в IDesk, все работает.

Другими словами

Это, пожалуй, самый хороший пример, но есть ряд запросов, которые вы можете сделать, используя систему регистрации. Например, вы можете просто спросить;

У меня есть эта вещь, пожалуйста, убедитесь, что у него есть этот интерфейс.

или даже в случае коммунальных услуг

Пожалуйста, дайте мне вещь, которая обеспечивает этот интерфейс для моего приложения

преимущества

Часто вся регистрация различных адаптеров и утилит выполняется для каждого приложения с использованием zcml. Это позволяет легко заменить один адаптер на другой или использовать другую реализацию утилиты, не меняя тонны кода.

В целом, регистрация компонентов усиливает разделение. Вы можете создавать несколько модулей, которые работают вместе, без необходимости их объединения. Единственное, что нужно двум модулям для совместной работы, - это общий набор интерфейсов.

Это делает невероятно простым написание модулей, которые работают без сбоев, не делая их зависимыми друг от друга, что, в свою очередь, упрощает добавление, удаление, развитие и тестирование новых компонентов без масштабного рефакторинга.

Дополнительная информация

Как я уверен, вы узнали, что различные фрагменты документации zope распространены и их трудно найти. Я думаю, что для некоторых концепций и преимуществ, которые они приносят, требуется много времени, лучшее, что вы можете сделать, это прочитать как можно больше, а затем жить в пещере на Аляске в течение шести месяцев и размышлять над этим.

Подробное руководство по архитектуре компонентов Zope - хорошее начало, но я также советую прочитать, по крайней мере, документы zope.component и документы zope.interface. В частности, этот пример может помочь вам понять преимущества

Другие вопросы по тегам