Skip to Content

Drupal как MVC Framework

"Архитектура программного обеспечения" - эти слова обычно пугают большинство веб-разработчиков фрилансеров. 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 есть куда совершенствоваться, в том числе в этом направлении, но уже сегодня её можно использовать в качестве мощного инструмента веб-разработки.

Комментарии

У меня большого опыта работы

У меня большого опыта работы с MVC нет. Но мне кажется идеологи MVC наверное решили бы, что в Drupal MVC реализовано несколько коряво. Представление еще туда-сюда, а вот модель и контроллер сделаны чересчур запутано и нелогично. Drupal всё-таки не настолько универсальная CMF, чтобы в ней можно было бы применять MVC в законченном виде.

Drupal прямо скажем вообще

Drupal прямо скажем вообще не CMF, а всего-лишь "вебдванольная" CMS Smile (вебдванольная - в смысле social-oriented платформа) Но MVC в нём имеется и вполне вменяемое - в меру возможностей технологии PHP и потребностей с точки зрения назначения - быстро поднимать социалки/магазины. Я считаю, что именно благодаря тому, что разработчики Drupal постарались спроектировать гибкую архитектуру с классическим MVC в основе, эта платформа стала столь популярной для расширений и переросла своё первоначальное предназначение.

Вечная беда Drupal - то его

  1. Вечная беда Drupal - то его относят к CMS, то к CMF. Последнее обычно (где-нибудь на форуме drupal.ru) для новичков в Drupal жалующихся на сложность овладения этим инструментом. Я бы не стал спорить по этому вопросу (хоть горшком назови Smile ), но из названия статьи как раз и следует, что Drupal именно CMF - если уж начали искать в нём MVC и Framework. При работе с CMS такие мысли в голову не приходят.
  2. По поводу MVC в Drupal. Как я уже говорил я в этом не специалист. Скажу собственное мнение. На практике с MVC я знаком по библиотеке Qt для C++. Если не знать принципов MVC, то хоть сколь-нибудь продвинутая работа с БД будет сопровождаться матами в адрес разработчиков этой библиотеки, придумавших что-то несуесветное. Если же в этом разбираться - то действительно всё получается просто и логично. В случае с Drupal этого не наблюдается. Можно клепать модули как заблагорассудиться. Отсутствует чёткий интерфейс присущий MVC. Знание api Drupal гораздо полезнее знания MVC. Хотя последнее конечно может и сослужить добрую службу. И не только в Drupal.

1. Да, вы правы, как Drupal

1. Да, вы правы, как Drupal не назови - суть от этого не изменится. Его можно воспринимать и как СMS - движок сайта, различные методы работы с контентом, и как CMF - API и архитектура модулей (особенно core), которые в частности задают идеологию работы с этим API.
2. По поводу MVC - в любом фреймворке грамотная реализация этого паттерна зависит не столько от интерфейсов, которые необходимо имплементировать, сколько от самих разработчиков. Ничто не помешает нерадивому девелоперу где-нибудь во view (например в шаблоне) считать из базы данных пачку записей, тут же ее обработать, а потом вывести на экран. А ведь это будет являться грубым нарушением одной из основных концепций MVC - отделения представления от бизнес-логики. И узнать про это можно будет только просмотрев код.

интересный материал для

интересный материал для статьи, можно я в универе с ней выступлю?

Drupal в массы Можете

Drupal в массы Smile Можете использовать, если хотите.

Drupal называют CMF на

Drupal называют CMF на drupal.ru, потому что там все что-то допрограммируют к нему. Всем нравится система хуков, код читабелен, и вполне легок, поэтому для них это CMF.
-------------------------------------------------------------------
Так же Drupal это одна из самых сильно-направленых CMS с точки зрения именно CMS, только потому что на нем можно построить реально мощный сайт с точки зрения функционала, не влезая в PHP вообще(кто знает хорошо этот движок, со мной согласятся). Но это благодаря CCK + Views. Большие нагрузки при этой связке, вопрос уже другой темы. Конкурента Views я не встречал в других CMS-ках.
-------------------------------------------------------------------
По поводу паттернов, у Drupal-а прослеживается свой какой-то паттерн, но вряд ли это MVC, здесь что-то другое, состоящее не из трех компонентов, возможно их больше.
------------------------------------------------------------------
Все ИМХО.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Smileys
:):D:bigsmile:;):p:O:|:(:~:((8):steve:J):glasses::party::love:
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <span> <div> <h2> <h3>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Textual smileys will be replaced with graphical ones.
  • You may insert videos with [video:URL]

Подробнее о форматировании

Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.