Архитектура Zend Framework |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Введение
Перед тем, как мы начнем наше исследование архитектуры 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 .
