Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 22, 2009 18:01:48

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Принципы создания приложения с компонентной архитектурой

Решил, что этот вопрос стоит запостить не в zope - раздел, а именно сюда, так как он к вебу и, собственно к Zope 3 в принципе прямого отношения не имеет.

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

Заранее спасибо за ответ.



Отредактировано (Сен. 22, 2009 18:15:09)

Офлайн

#2 Сен. 22, 2009 18:58:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Принципы создания приложения с компонентной архитектурой

zope.interface постоянно использую без zope. Это - интерфейссы и адаптеры. Остальное было не нужно



Офлайн

#3 Сен. 22, 2009 21:51:55

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Принципы создания приложения с компонентной архитектурой

А как насчет реестра адаптеров, утилит и ZCML?



Офлайн

#4 Сен. 23, 2009 02:10:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Принципы создания приложения с компонентной архитектурой

реестр нужен был примитивный - сделал через хук в zope.interface.
Утилиты - как-то обхожусь. В zope оно удобно, но я использую немного другие средства для того же.
ZCML - чур меня, чур. Кстати, а кому он без zope нужен?



Офлайн

#5 Сен. 23, 2009 12:09:05

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Принципы создания приложения с компонентной архитектурой

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

Так вот вопрос (сейчас копаюсь в коде zope3): можно ли обойтись одним пакетом zope.configuration, чтоб подключить zcml?



Офлайн

#6 Сен. 24, 2009 12:00:46

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Принципы создания приложения с компонентной архитектурой

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

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

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

..bw



Офлайн

#7 Сен. 24, 2009 13:29:20

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Принципы создания приложения с компонентной архитектурой

Значит так. Покопался в коде и таки кое-чему научился =).
Подключить 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.

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



Отредактировано (Сен. 24, 2009 13:41:44)

Офлайн

#8 Сен. 24, 2009 17:16:22

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Принципы создания приложения с компонентной архитектурой

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


regall
Возникла у меня идейка написать по поводу моих скитаний статейку, если решусь - кину ссылку
отлично, поддерживаю ;)



Офлайн

#9 Сен. 24, 2009 20:05:10

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Принципы создания приложения с компонентной архитектурой

> Подключить 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



Офлайн

#10 Сен. 24, 2009 21:12:49

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Принципы создания приложения с компонентной архитектурой

Сейчас такое полезное наблюдение сделал, если дернуть за 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



Отредактировано (Сен. 24, 2009 21:13:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version