BlueBream
вэб-фреймворк




   http://margincon.ru
    Омск, 26.06.2010
  Ильшад Хабибуллин
Базис
           идеи, ведущие к появлению BlueBream

       Over-engineering                    Расширяемость как
    через предвосхищение
                                          необходимое условие


➔ ООП иерархии                        Есть такие проекты, где это
➔ Код для вставки хуков
                                      необходимо
➔ Лишние абстракции

➔ Написание библиотек                 ➔ Проекты с постоянно
 и фреймворков на ровном              изменяемыми требованиями
 месте                                ➔ Расширяемые продукты




                           КОНФЛИКТ
Вынос over-engineering
                    на сторону
       Over-engineering         Расширяемость как
    через предвосхищение       необходимое условие

➔  ООП иерархии            Есть такие проекты, где это
➔ Код для вставки хуков    необходимо
➔ Лишние абстракции

➔ Написание библиотек
                           ➔ Проекты с постоянно
 и фреймворков на ровном   изменяемыми требованиями
 месте                     ➔ Расширяемые продукты




                                                         Тулкит
Launchpad

     ZTK
                      •

                      • Shooltool

                      • Plone

                      • ERP5

                      • ...




                        Инфраструктура,
                    интеграция инструментов в
                           фреймворк




BlueBream
            ➔ Быстрый старт
            ➔ Конфигурации по умолчанию

            ➔ Интегрирующая документация
Важные идеи BlueBream
●   Интерфейсы                ●   Security Proxy
●   Реестры компонент:        ●   Декларативный язык
    глобальные и локальные        ZCML
●   Компонентная              ●   Развертывание:
    архитектура, основанная       Buildout
    на адаптерах
●   Интерфейсы                                ●   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



                                                                                 ЗАПРОC:
    Python объекты становятся компонентами                                       ● interface
    тогда, когда они зарегистрированы в                                          ● name
    реестрах компонент




class Foo:                        class Foo:
   pass                              implements(IFoo)                           Реестр



                                                                             Выбирает компоненты
●   Интерфейсы
                                                ●   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.ru
http://bluebream.zope.org

 Ильшад Хабибуллин
 http://astoon.zwiki.org

Ильшад Хабибуллин — BlueBream

  • 1.
    BlueBream вэб-фреймворк http://margincon.ru Омск, 26.06.2010 Ильшад Хабибуллин
  • 2.
    Базис идеи, ведущие к появлению BlueBream Over-engineering Расширяемость как через предвосхищение необходимое условие ➔ ООП иерархии Есть такие проекты, где это ➔ Код для вставки хуков необходимо ➔ Лишние абстракции ➔ Написание библиотек ➔ Проекты с постоянно и фреймворков на ровном изменяемыми требованиями месте ➔ Расширяемые продукты КОНФЛИКТ
  • 3.
    Вынос over-engineering на сторону Over-engineering Расширяемость как через предвосхищение необходимое условие ➔ ООП иерархии Есть такие проекты, где это ➔ Код для вставки хуков необходимо ➔ Лишние абстракции ➔ Написание библиотек ➔ Проекты с постоянно и фреймворков на ровном изменяемыми требованиями месте ➔ Расширяемые продукты Тулкит
  • 4.
    Launchpad ZTK • • Shooltool • Plone • ERP5 • ... Инфраструктура, интеграция инструментов в фреймворк BlueBream ➔ Быстрый старт ➔ Конфигурации по умолчанию ➔ Интегрирующая документация
  • 5.
    Важные идеи BlueBream ● Интерфейсы ● Security Proxy ● Реестры компонент: ● Декларативный язык глобальные и локальные ZCML ● Компонентная ● Развертывание: архитектура, основанная Buildout на адаптерах
  • 6.
    Интерфейсы ● 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
  • 7.
    Интерфейсы ● Security Proxy ● Реестры компонент: глобальные ● Декларативный язык ZCML и локальные ● Компонентная архитектура, основанная на адаптерах ● Развертывание: Buildout ЗАПРОC: Python объекты становятся компонентами ● interface тогда, когда они зарегистрированы в ● name реестрах компонент class Foo: class Foo: pass implements(IFoo) Реестр Выбирает компоненты
  • 8.
    Интерфейсы ● 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
  • 9.
    Интерфейсы ● Security Proxy ● Реестры компонент: глобальные и локальные ● Декларативный язык ZCML ● Компонентная архитектура, основанная на адаптерах ● Развертывание: Buildout Все объекты обернуты в Security Proxy
  • 10.
    Интерфейсы ● Security Proxy Реестры компонент: глобальные и локальные Декларативный язык ● ● Компонентная архитектура, основанная на ZCML ● адаптерах ● Развертывание: Buildout Декларативные конструкции - на декларативном языке. Простой XML с одним уровнем вложенности.
  • 11.
    Интерфейсы ● Security Proxy ● Реестры компонент: глобальные и локальные ● Декларативный язык ZCML ● Компонентная архитектура, основанная на ● Развертывание: адаптерах Buildout $ python bootstrap.py $ bin/buildout $ bin/paster serve deploy.ini
  • 12.