Pull to refresh

Drupal как MVC Framework

Reading time3 min
Views6.2K
«Архитектура программного обеспечения» — эти слова обычно пугают большинство веб-разработчиков фрилансеров. 3-Tier, MVC, Singleton, Factory… «Стойте! прекратите! зачем всё усложнять?» — сказали бы вам в ответ, — «Вот есть же, например, Drupal — темку сверстали, модули докрутили-настроили и в принципе сайт готов.» Действительно, CMS Drupal предоставляет отличную платформу для быстрой разработки, требуя при этом минимальное количество вложенных усилий.

Многие наверняка слышали о таком понятии, как «идеология Drupal» — это как раз то, благодаря чему данная CMS стала такой удобной и эффективной платформой. Но возможно немногие догадываются, что в основе упомянутой идеологии лежит широко известный паттерн MVC, или Model-View-Controller.


Drupal MVC

Паттерн (т.е. шаблон проектирования) MVC состоит из трех взаимосвязанных элементов: Модель, Представление и Контроллер. Такое разделение на компоненты позволяет разграничить пользовательские интерфейсы, управляющую логику и контент.

Модель — это собственно контент, данные, отражающие предметную область и структурированные в соответствии с какой-то схемой, например, в виде таблиц реляционной базы данных (MySQL, PostgreSQL, MS SQL Server, Oracle). Так называемое DB API (набор функций для работы с базой данных) тоже является частью Модели. Помимо того к Модели относится программный код, определяющие типы данных и их свойства и взаимосвязи.
С точки зрения Drupal, Модель — это БД плюс такие модули, как node.module, taxonomy.module, CCK. Другие сторонние модули наряду с основными своими функциями могут также дополнять Модель своими типами данных либо функциями общения с базой.

Контроллер интерпретирует данные, введенные пользователем, осуществляет смену состояний в зависимости от пользовательских действий, манипулирует сущностями Модели так, чтобы их можно было превратить в Представление, и в общем делает всё, чтобы шестеренки системы крутились. В Drupal Контроллер — это базовые модули типа path.module, система меню, хуки, файл index.php, собирающий и загружающий систему, и т.д. Также вся логика, имплементируемая дополнительными модулями, является частью Контроллера.

Представление отвечает за отображение Модели пользователю. В случае Drupal — это конечные странички сайта, составленные Контроллером на основе запросов посетителя и текущей Модели. К Представлению относятся шаблоны страниц, написанные на движке PHPTemplate, CSS файлы стилей, Javascript, отвечающий за рюшечки в интерфейсе. Через Представление пользователь осуществляет общение с сайтом — Контроллер лишь обрабатывает отправленные браузером HTTP GET и POST запросы, интерпретирует URL, а затем вновь формирует Представление и передает его на пользовательский компьютер.

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

Такой подход уже зарекомендовал себя в таких технологиях, как ASP.NET, J2EE, Spring. Drupal, являясь системой управления контентом, довольно удачно перенял этот опыт, фактически предложив полноценную платформу для создания любого типа веб-сайтов на основе архитектуры MVC в самой распространенной на сегодня связке LAMP (Linux-Apache-MySQL-PHP). Несомненно, данной CMS есть куда совершенствоваться, в том числе в этом направлении, но уже сегодня её можно использовать в качестве мощного инструмента веб-разработки.

PS. Автором топика является хабраюзер alirasirin, все плюсы, если есть желающие — ей.
Tags:
Hubs:
+23
Comments33

Articles

Change theme settings