Найти - Пользователи
Полная версия: Принципы создания приложения с компонентной архитектурой
Начало » Python для экспертов » Принципы создания приложения с компонентной архитектурой
1 2
regall
Решил, что этот вопрос стоит запостить не в zope - раздел, а именно сюда, так как он к вебу и, собственно к Zope 3 в принципе прямого отношения не имеет.

Собственно, вопрос в следующем:
Возможно ли, и если возможно, то как подходить к написанию приложений с компонентной архитектурой на базе интерфейсов (zope.interface.Interface), без старта application server, а только использовать такие вещи, как:
- интерфейсы,
- адаптеры,
- реестры утилит, адаптеров, …
- ZCML. ?

Заранее спасибо за ответ.
Андрей Светлов
zope.interface постоянно использую без zope. Это - интерфейссы и адаптеры. Остальное было не нужно
regall
А как насчет реестра адаптеров, утилит и ZCML?
Андрей Светлов
реестр нужен был примитивный - сделал через хук в zope.interface.
Утилиты - как-то обхожусь. В zope оно удобно, но я использую немного другие средства для того же.
ZCML - чур меня, чур. Кстати, а кому он без zope нужен?
regall
Андрей Светлов
ZCML - чур меня, чур. Кстати, а кому он без zope нужен?
Ну, мне zcml все-таки очень удобное средство для конфигурации, чтобы не делать в коде каждый раз что-то типа,
registry.register..
а все впихивать по модулям в zcml:
<adapter
for = "IFoo"
factory = "FooToBar"
...
</adapter>
А то такие конструкции в коде, как мне кажется, засоряют код и немного теряется читабельность.

Так вот вопрос (сейчас копаюсь в коде zope3): можно ли обойтись одним пакетом zope.configuration, чтоб подключить zcml?
bw
zope.interface использую давно.
Буквально пару недель назад начал пользовать zope.component, zope.configuration и zope.schema, пока впечатления только положительные. Стремно, что многие другие любопытные пакеты тянут за сабой огромные зависимости, вплоть до ZODB3.

> можно ли обойтись одним пакетом zope.configuration
Нет. Но зависимости у него минимальные и в основном полезные. Т.е. меня они совершенно не смущают.

p.s. Пользуясь случаем хочу выразить благодарность разработчикам компонентной модели и других полезняшек Zope3.

..bw
regall
Значит так. Покопался в коде и таки кое-чему научился =).
Подключить ZCML довольно-таки просто:
from zope.configuration.xmlconfig import xmlconfig
from cStringIO import StringIO
from zope.component.tests import clearZCML,

clearZCML()
xmlconfig(StringIO(open('configure.zcml').read()))
Потом смотрим в глобальный реестр, находящийся по адресу: zope.component.globalregistry.base.
Смотрим base.adapters._adapters - и вуаля - у нас весь zcml отработал правильно.

Всем спасибо за участие в дискуссии и помощи, буду копать дальше.

bw
Пользуясь случаем хочу выразить благодарность разработчикам компонентной модели и других полезняшек Zope3.
Присоединяюсь =)

p.s.

Возникла у меня идейка написать по поводу моих скитаний статейку, если решусь - кину ссылку, думаю многим будет полезно (т.к. литературы по данному вопросу почти нет)
j2a
regall
from zope.component.tests import clearZCML … Смотрим base.adapters._adapters
Чего-то по выделенным местам не похоже, что это прямой путь :)


regall
Возникла у меня идейка написать по поводу моих скитаний статейку, если решусь - кину ссылку
отлично, поддерживаю ;)
bw
> Подключить ZCML довольно-таки просто:
Ты хотел сказать…
from zope.configuration import xmlconfig
xmlconfig.file('configure.zcml')
:-)

> zope.component.globalregistry.base
Чур меня, только zope.component.getGlobalSiteManager() и никак иначе.

> base.adapters._adapters
Опять 25 – zope.component.getGlobalSiteManager().registeredAdapters().

..bw
bw
Сейчас такое полезное наблюдение сделал, если дернуть за zope.security вытягивается небольшой набор очень интересных пакетов, которые, пожалуй, можно поголовно использовать в средних и крупных проектах:
- zope.component
- zope.configuration
- zope.copy
- zope.event
- zope.exceptions
- zope.i18nmessageid
- zope.interface
- zope.location
- zope.proxy
- zope.schema
- zope.security
Общий объем ~3.5 метра (с компиляцией модулей в pyc). Пока уверенности нет, но если они заработают в архиве, то размер будет заметно меньше. Глянул сейчас исходники zope.configuration, все .zcml в архивах работать не будут :-(, т.е. они не будут читаться из архивных яиц. Это объясняется тем, что доступ к конф. файлам осуществляется через системные функции, а не (религиозно правильно :-) через pkg_resources. Собственно я сам начал лишь недавно пользоваться этим модулем, а зоповцам, как я понимаю, еще предстоит его внедрить в zope.configuration и другой код, работающий с “пакетными” ресурсами.

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB