Ильшад Хабибуллин — bluebream
DESCRIPTION
Ильшад Хабибуллин расказывает о веб-фреймворке BlueBream на базе ZTK.TRANSCRIPT
Базисидеи, ведущие к появлению BlueBream
Over-engineeringчерез предвосхищение
Расширяемость какнеобходимое условие
➔ ООП иерархии➔ Код для вставки хуков➔ Лишние абстракции➔ Написание библиотеки фреймворков на ровномместе
Есть такие проекты, где этонеобходимо
➔ Проекты с постоянно изменяемыми требованиями➔ Расширяемые продукты
КОНФЛИКТ
Вынос over-engineeringна сторону
Over-engineeringчерез предвосхищение
Расширяемость какнеобходимое условие
➔ ООП иерархии➔ Код для вставки хуков➔ Лишние абстракции➔ Написание библиотеки фреймворков на ровномместе
Есть такие проекты, где этонеобходимо
➔ Проекты с постоянно изменяемыми требованиями➔ Расширяемые продукты
Тулкит
ZTK• Launchpad• Shooltool• Plone• ERP5• ...
BlueBream➔ Быстрый старт➔ Конфигурации по умолчанию➔ Интегрирующая документация
Инфраструктура,интеграция инструментов в
фреймворк
● Интерфейсы● Реестры компонент:
глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
Важные идеи BlueBream
● Интерфейсы● Реестры компонент: глобальные и
локальные
● Компонентная архитектура, основанная на адаптерах
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
from zope.interface import Interface, Attribute, implements
class IFoo(Interface): bar = Attribute("Bar attribute") def baaz(): """Doc string"""
class Foo(object): implements(IFoo)
bar = None
def baaz(self): pass
● Интерфейсы
● Реестры компонент: глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
class Foo:implements(IFoo) Реестр
class Foo:pass
Python объекты становятся компонентамитогда, когда они зарегистрированы вреестрах компонент
ЗАПРОC:
● interface● name
Выбирает компоненты
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
● Интерфейсы
● Реестры компонент: глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
class IPerson(Interface): name = Attribute("Person Name")
class Article2Person(object): implements(IPerson) adapts(IArticle)
def __init__(self, article): self.article = article
@property def name(self): return self.article.get_article_name()
# использование адаптера adapter = IPerson(ob) name = adapter.name
● Security Proxy● Декларативный язык ZCML
● Развертывание: Buildout
● Интерфейсы
● Реестры компонент: глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
Все объекты обернуты в Security Proxy
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
● Интерфейсы
● Реестры компонент: глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
Декларативные конструкции - на декларативном языке.
Простой XML с одним уровнем вложенности.
● Security Proxy
● Декларативный язык ZCML
● Развертывание: Buildout
● Интерфейсы
● Реестры компонент: глобальные и локальные
● Компонентная архитектура, основанная на адаптерах
$ python bootstrap.py$ bin/buildout
$ bin/paster serve deploy.ini
http://bluebream.ruhttp://bluebream.zope.org
Ильшад Хабибуллинhttp://astoon.zwiki.org