7538
Комментарий:
|
13394
|
Удаления помечены так. | Добавления помечены так. |
Строка 7: | Строка 7: |
=== Интерфейс === | === Интерфейсы (Interface) === |
Строка 30: | Строка 30: |
=== События === | === События (Event) === |
Строка 34: | Строка 34: |
=== Адаптеры === | === Адаптеры (Adapter) === |
Строка 51: | Строка 51: |
=== Утилиты (Utility) === Утилиты - это компоненты, которые служат для реализации одной специфической функции, и не предназначены для взаимодействия с другими компонентами. Хорошая аналогия для Python программистов - это функции и методы. Представим, что утилиты - это функции, то есть самостоятельные объекты, которым не требуются другие объекты для того, чтобы выполнять свою работу. Тогда адаптеры - это методы класса, которым нужен другой объект для выполнения своих задач. Утилиты в большинстве случаев используются для создания простых компонентов, которые выполняют одно простое задание, например, синтаксический анализатор XML. Иногда очень полезно зарегистрировать объект, который ничего не адаптирует. Примерами таких объектов могут служить: соединение к базе данных, синтаксический анализатор XML, объект, генерирующий уникальные идентификаторы и т.д. Этот тип компонентов предоставляется ZCA и называется вспомогательными компонентами (utility components). Утилиты - простые объекты, поиск которых производится по интерфейсу и имени. Такой подход делает необходимым создание глобального реестра, в котором можно зарегистрировать экземпляры утилит с тем, чтобы они были доступны из любой точки приложения, тем самым избавляя разработчика от потребности повсеместно передавать экземпляры классов утилит в качестве параметров выполняемой задачи. === Подписчики (Subscriber) === В отличии от обычных адаптеров, адаптеры-подписчики (subscription adapters, subscribers) используются тогда, когда нужны сразу все адаптеры, которые адаптируют объект к определенному интерфейсу. Адаптеры-подписчики также известны как просто подписчики. === Обработчики (Handler) === Обработчики - это фабрики подписчиков, которые ничего не производят. Они просто выполняют свою работу в тот момент, когда их вызвали. Обработчики обычно используются для оказания реакции на события. Обработчики также называют подписчиками на события (event subscribers) или адаптерами-подписчиками на события (event subscription adapters). Подписчики на события (Event subscribers) отличаются от других подписчиков тем, что тот, кто их вызывает не ожидает от них прямого взаимодействия. Например, от публикатора событий (event publisher) не ожидается никакого возвращаемого значения. Рекомендуется оформлять подписчики в виде функций, а не классов, из-за того, что подписчики не предоставляют программного интерфейса (API) тем, кто их вызывает. === Реестр компонентов === Реестры хранят список доступных компонентов, информацию о том, какие интерфейсы они предоставляют, какой интерфейс(ы) они, возможно, адаптируют, а также необязательное регистрационное имя. Пакет ''zope.component'' реализует глобальный реестр компонентов. Пакет ''zope.site'' предоставляет локальный персистентный реестр компонентов, который называется сайт-менеджер (site manager), и предназначен для регистрации локальных утилит и адаптеров. === Публикация объектов === !BlueBream выкладывает объекты в веб. Этот процесс называется публикацией объектов. Одна из уникальных характеристик !BlueBream - это способ, который предлагается для перехода от объекта к объекту, и вызова методов этих объектов только с помощью URL. Вдобавок к HTTP, !BlueBream предоставляет возможность публикации путем использования и других протоколов как FTP, WebDAV и XML-RPC. |
Конценпции и технологии
Содержание
Концепции
Интерфейсы (Interface)
Интерфейсы - это объекты, описывающие внешнее поведение других объектов, которые предоставляют (provide) реализуемые ими интерфейсы (своего рода спецификация). Интерфейс предоставляет спецификацию объектов, которые их реализуют через:
- информационную документация в строках документации (doc string);
- определение атрибутов;
- инварианты (Invariants), то есть условия, которые должны выполнятся для объектов, которые предоставляют (provide) интерфейс;
Вот несколько преимуществ, которые вы получаете при использовании интерфейсов:
- избегаете монолитной структуры приложения, разрабатывая маленькие кусочки для повторного использования;
- моделируете внешнюю функциональность и поведение;
- Устанавливаете связи между отдельными частями приложения;
- документируете API
Компонентная архитектура Zope
Основная идея компонентной архитектуры Zope - предоставить способ использования компонентов с тем, чтобы отказаться от сложностей, которые возникают при управлении иерархиями объектов с множественным наследованием.
Компонентная архитектура Zope - способ создания компонентов многоразового использования, а не набор этих компонентов.
Компонент - это объект, предназначенный для многоразового использования обладающий обозримым (introspectable )интерфейсом. С другой стороны компоненты являются связуемыми расцепленными объектами. Компонент предоставляет (provides) интерфейс, который реализован классом. При этом не имеет значения, каким образом реализован компонент, важно то, что он соответствует интерфейсу, который описывает его поведение и функциональность. Интерфейс - это объект, который описывает поведение конкретного компонента. Используя компонентную архитектуру Zope, можно избавиться от сложности разрабатываемой системы, распылив ее на мелкие взаимодействующие между собой компоненты. Компонентная архитектура Zope помогает создавать два основных типа компонентов - адаптеры и утилиты.
События (Event)
События - это объекты, которые сигналят о том, что в системе что-то случилось. Они используются для расширения обработки запросов путем обеспечения точек вставки реакции на них (plug points). Пакет zope.event обеспечивает базовую систему публикации событий. Также этот пакет предоставляет очень простую диспетчерскую систему, на основе которой можно построить более сложные. Например, в пакете zope.component находится диспетчерская система основанная на типах, и построена она на основе пакета zope.event.
Адаптеры (Adapter)
Адаптеры используют интерфейс существующего компонента и адаптируют этот компонент, наделяя возможностью предоставлять другой интерфейс.
Когда приложения вырастают, в коде возникает побочный эффект, так называемый макаронный эффект: взаимодействия между классами могут привести к нежелаемым зависимостям и код превращается в монолитный блок.
Адаптеры предоставляют возможность избежать этого, реализуя принцип подстановки Лисков.
Адаптеры предоставляют механизм сотрудничества между данным объектом и конкретным контекстом посредством интерфейсов. Они позволяют произвольному классу быть совместимым с данным интерфейсом, предоставляя слой совместимости (compatibility layer).
Этот механизм используется и в других системах, например, Microsoft COM QueryAdapter, и позволяет разработчику собирать объекты в специфический функционирующий контекст. Другое название этого механизма - склеивающий кода (glue code).
Использование адаптеров предоставляет следующие преимущества:
- Они позволяют собирать экземпляры классов в контексты, для которых эти классы не были реализованы, без изменения программного кода исходных классов, а также не добавляя к ним зависимостей.
- Они предоставляют легкий путь сборки общих функций, которые могут применяться к различным классам.
С другой стороны адаптеры - формализованный путь утиной типизации (duck typing), который был предложен несколько лет назад в рамках PEP 246. Есть и другие реализации адаптеров, например PyProtocols.
Утилиты (Utility)
Утилиты - это компоненты, которые служат для реализации одной специфической функции, и не предназначены для взаимодействия с другими компонентами. Хорошая аналогия для Python программистов - это функции и методы. Представим, что утилиты - это функции, то есть самостоятельные объекты, которым не требуются другие объекты для того, чтобы выполнять свою работу. Тогда адаптеры - это методы класса, которым нужен другой объект для выполнения своих задач.
Утилиты в большинстве случаев используются для создания простых компонентов, которые выполняют одно простое задание, например, синтаксический анализатор XML. Иногда очень полезно зарегистрировать объект, который ничего не адаптирует. Примерами таких объектов могут служить: соединение к базе данных, синтаксический анализатор XML, объект, генерирующий уникальные идентификаторы и т.д. Этот тип компонентов предоставляется ZCA и называется вспомогательными компонентами (utility components).
Утилиты - простые объекты, поиск которых производится по интерфейсу и имени. Такой подход делает необходимым создание глобального реестра, в котором можно зарегистрировать экземпляры утилит с тем, чтобы они были доступны из любой точки приложения, тем самым избавляя разработчика от потребности повсеместно передавать экземпляры классов утилит в качестве параметров выполняемой задачи.
Подписчики (Subscriber)
В отличии от обычных адаптеров, адаптеры-подписчики (subscription adapters, subscribers) используются тогда, когда нужны сразу все адаптеры, которые адаптируют объект к определенному интерфейсу. Адаптеры-подписчики также известны как просто подписчики.
Обработчики (Handler)
Обработчики - это фабрики подписчиков, которые ничего не производят. Они просто выполняют свою работу в тот момент, когда их вызвали. Обработчики обычно используются для оказания реакции на события. Обработчики также называют подписчиками на события (event subscribers) или адаптерами-подписчиками на события (event subscription adapters).
Подписчики на события (Event subscribers) отличаются от других подписчиков тем, что тот, кто их вызывает не ожидает от них прямого взаимодействия. Например, от публикатора событий (event publisher) не ожидается никакого возвращаемого значения. Рекомендуется оформлять подписчики в виде функций, а не классов, из-за того, что подписчики не предоставляют программного интерфейса (API) тем, кто их вызывает.
Реестр компонентов
Реестры хранят список доступных компонентов, информацию о том, какие интерфейсы они предоставляют, какой интерфейс(ы) они, возможно, адаптируют, а также необязательное регистрационное имя. Пакет zope.component реализует глобальный реестр компонентов. Пакет zope.site предоставляет локальный персистентный реестр компонентов, который называется сайт-менеджер (site manager), и предназначен для регистрации локальных утилит и адаптеров.
Публикация объектов
BlueBream выкладывает объекты в веб. Этот процесс называется публикацией объектов. Одна из уникальных характеристик BlueBream - это способ, который предлагается для перехода от объекта к объекту, и вызова методов этих объектов только с помощью URL. Вдобавок к HTTP, BlueBream предоставляет возможность публикации путем использования и других протоколов как FTP, WebDAV и XML-RPC.