Какой смысл регистрировать компонент 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. В частности, этот пример может помочь вам понять преимущества