Архитектура Zend Framework

Federico Cargnelutti, “Zend Framework Architecture”, public translation into Russian from English More about this translation.

Translate into another language.

Введение

Перед тем, как мы начнем наше исследование архитектуры Zend Framework (ZF), очень важным будет обсудить устройство типичного MVC-приложения. Изучение и понимание архитектуры Web-приложения на основе MVC (модель-представление-контроллер) позволит вам больше внимания уделить контекстным решениям нежели разработке вашего приложения.

Трехуровневая архитектура

Трехуровневая архитектура сосредоточена на распределении обязанностей между разными частями приложения. Она имеет следующие уровни:

Уровень представления

Наивысший уровень приложения - пользовательский интерфейс (UI). Главной функцией интерфейса является перевод запросов и результатов во что-нибудь, что пользователь может понять.

Уровень приложения

Этот уровень координирует приложение, команды процессора, делает логические выводы и оценки, и выполняет вычисления. Также он перемещает данные процессов между двумя окружающими уровнями.

Уровень данных

Здесь хранится информация и извлекается из базы данных или файловой системы. Информация затем проходит дальше в логический ярус для обработки и в конечном счете оказывается у пользователя.

Архитектура Модель-Представление-Контроллер

Хотя трехъярусная архитектура похожа на архитектуру MVC, они различны. В принципе трехъярусной архитектуры лежит линейность. Ярус представления никогда напрямую не свяжется с ярусом данных и все общение должно происходить через ярус приложений. Тем не менее, архитектура MVC триангулярная(треугольная): Вид отправляет корректировки в Контроллер, Контроллер корректирует Модель, и Вид забирает внесенные изменения напрямую из Модели.

Zend Framework

Zend Framework обеспечивает компоненты для MVC и шаблон проектирования Table Gateway, которые используются в большинстве веб-приложений. Разработанный Zend Technologies и выпущенный в 2005 году, Zend Framework во многом базируется на Solar Framework, разработанном Paul'ом M. Jones'ом, вот причина того что они распространили аналогичную лежащую в основе архитектуру.

Есть 3 типа фреймворков для Web приложений

Одни предоставляют цельную инфраструктуру: Symfony, Solar, Ruby on Rails и Django.

Другие предлагают библиотеки компонентов: ezComponents и PEAR.

Третьи предлагают оба варианта: Zend Framework.

Zend Framework предлагает не только цельную инфраструктуру, но и расширенную библиотеку компонентов. Структура компонента ZF это нечто уникальное, каждый компонент разработан с наименьшими зависимостями с другими компонентами. Эта свободно-связанная архитектура позволяет разработчикам использовать компоненты индивидуально.

Архитектура.

Архитектура фреймворка базируется на архитектурных схемах Front Controller и Model-View-Controller.

Схема MVC.

Модель - это часть приложения, которая определяет его базовую функциональность за набором абстракций. Уровень доступа к данным и некоторая бизнес-логика определены в Модели. Виды точно определяют что будет показано пользователю. Обычно контроллеры посылают данные в каждый вид, чтобы представить их в соответствующем формате. Контроллеры связывают всю форму воедино. Они могут манипулировать моделями, решать какие виды отображать, основываясь на запросе пользователя и других факторах, анализируют данные, которые понадобятся видам, или полностью передают контроль другому контроллеру.

Схема Front Controller

Zend_Controller - сердце системы MVC Zend Framework. Zend_Controller_Front реализует паттерн Front Controller, в котором все запросы прерываются преконтроллером и отправляются индивидуальным Контроллерам Действий, базируемым на запросах URL.

Связи

ZF располагает слабо связанной компонентной библиотекой, упрощенной для того, чтобы обеспечить наибольшую функциональность каждому, кто разрабатывает веб приложения. В объектно-ориентированном программировании связь или зависимость - это степень, с которой каждый компонент зависит от всякого другого компонента. Самое большое преимущество слабо связанной архитектуры в том, что она позволяет разработчикам использовать компоненты по отдельности.

Нэйл Гарб выполнил отличную работу, оценивая уровень связывания в Zend Framework, основываясь на количестве зависимостей, установленных в коде. Я продолжил его работу, определяя уровень связывания компонентов, установленный во время выполнения. Я использую расширение Inclued, чтобы проследить иерархию включений файлов и наследования классов во время выполнения.

Диаграммы, представленные ниже, были получены с использованием Graphviz

Зависимости Zend_Controller

Зависимости Zend_Controller и Zend_Db

Зависимости Zend_Controller, Zend_Db и Zend_From

Для работы стандартного приложения на Zend Framework необходимы следующие компоненты:
Zend_Controller, Zend_Uri, Zend_Registry, Zend_Loader, Zend_Config, Zend_Layout, Zend_View, Zend_Filter, Zend_Validate, Zend_Db, Zend_Form, Zend_Paginator and Zend_Exception.

Немного критики

Считается, что Zend Framework является новаторским способом управления сложностью веб разработки. Многие считают, что ZF достаточно хорошо справляется с этой задачей, однако он не адаптируется универсально ко всем стилям проектирования, средам или требованиям.

О производительности

Большее недовольство вызвано его производительностью. На производительность фреймворка влияют много факторов, в частности, конфигурация ваших серверов. Однако от дизайна приложения сильно зависит и он определяет, будет ваш сайт медленно или быстро реагировать на запросы. Недавние измерения показывают, что Zend Framework медленнее других веб фреймворков. Другая проблема, как здесь пояснили, - это дизайн Роутера. Если приложение усложняется и привлекает больше трафика, вопросы с производительностью станут наиболее вероятными.

Строение системы

Хотя данный фреймворк поддерживает модульность, он страдает от недостатка таких вспомогательных инструментов, как Координатор Модулей. В систему не включен ни один компонентный или конфигурационный механизм для работы с зависимостями Модели и Контроллера, что приводит к большим трудностям в разделении модулей между приложениями. Также в Zend_Controller не разрешена модульная система для загрузки файлов модели как из собственного модуля, так и из внешних модулей.

В системе отсутствуют локальные контейнеры для управления зависимостями между объектами и взаимосвязями. Вместо этого, она использует глобальный контейнер для хранения объектов. По словам Троэльз Нак-Нилсена, проблема состоит в том, что глобальный контейнер, будь он наипростейшим или замысловатым, будет всегда глобальным обозначением. Большинство программистов согласятся с тем, что глобальные переменные - плохая идея, это же касается и глобальных контейнеров.

Пространства имен

По мере того, как на горизонте показывается PHP 5.3, Zend Framework API подвергается редизайну. Пока пространства имен, будем надеятся, приведут к более читабельному коду, разработчикам Zend в конце концов придется начать думать о некоторых стандартах для абстрактных классов и интерфейсах.

Ссылки

Zend Framework

Solar Framework

Нэйл Граб

Graphviz

DOT Guide (PDF)

расширение Inclued

© Federico Cargnelutti

Original (English): Zend Framework Architecture

Translation: © Олег, soulist, Денис, atukai, Ann, Leccoi, eugene-nefrit .

translated.by crowd

Like this translation? Share it or bookmark!