Метафора внутренней обработки модуля Drupal

Какова наилучшая метафорина рабочего процесса для модуля Drupal? В PHP-структурах мы думаем о стиле MVC. Как мы думаем внутри Drupal?

Asumming Я пишу некоторый пользовательский модуль, например Shop, Catalog или Forum. Насколько я понимаю, нет ни одного или нескольких модулей на базе MVC. Должен ли я вообще относиться к модулям Drupal (как к суб-приложению) как к числу экраны, связанные через формы и гиперссылки, или есть лучший способ.

Мой вопрос может быть немного умозрительным, но я надеюсь, что кто-то поделится моими намерение мыслить модели, а не просто "скрипты".

Ответы

Ответ 1

Presentation-abstraction-control (PAC), похоже, является самым близким соответствием шаблону, описывающему общий подход Drupals, но я думаю, что это больше или менее случайным;)

Иерархическая организация (более или менее) независимых триплетов PAC может быть грубо сопоставлена ​​с модулями Drupal, которые являются более или менее независимыми агентами под общей крышей, выполняя свою роль во всех трех областях (View, Controller, Model/Abstraction).

Model-view-presenter также определяет некоторые аспекты, которые можно найти в Drupal, особенно отклонение от MVC в том, что View не принимает его содержимое непосредственно из Модели, но из контроллера, так что поток информации строго View<>Controller/Presenter<>Model.

Но разделение проблем в Drupal (пока еще) довольно неформальное и во многом зависит от кодирующей дисциплины разработчиков, поэтому постоянно находится на грани полного разрушения (имеется много модулей, вставляющих много логики в тематический слой, более или менее похожий на представление).

Тем не менее, не исключая строгое разделение, по-видимому, является одной из причин успеха Drupals, поскольку это позволяет широкому кругу людей с очень разным опытом вносить свой вклад, не обучая разработчиков. Например, HTML/CSS Guy с небольшим знанием PHP может получить довольно много настроек и добавленной функциональности из своих шаблонов, без необходимости реализовывать полностью модулированные модули. Если то, что он сделал, представляет общий интерес, оно рано или поздно превратится в более формальную структуру/модуль другими людьми, собирающими его. То же самое относится к разработчикам wannabee, hobby и beginner - они могут достичь своих целей, даже не понимая, что происходит, поэтому их идеи по функциональности добавляются к вкладам и могут быть уточнены, если они отвечают общему интересу.

До сих пор это работало очень хорошо - ядро ​​Drupal получило более формальный (или менее скриптовый;) с каждой крупной версией, сохраняя при этом гибкость при добавлении - давайте посмотрим, сохранится ли это в будущем...

Ответ 2

Модули в drupal лучше всего рассматривать как набор функций (реализация "крючков" drupal), которые вызывается, когда в движке происходят определенные "события". Это не строго пользовательские события, но также, например, этапы загрузки (перед загрузкой node, после загрузки node и т.д.) Или проверки (движок проверяет разрешения, вы хотите добавить некоторые?).

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

Таким образом, нет жесткого соединения с формами или страницами, и нет никакого отношения ни к чему, как к модели MVC... с версии 6, drupal не основан на объектах.

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

Ответ 3

Ключи Drupal называются Listeners, или Наблюдатели на большинстве языков OO. Хотя они технически следуют этой схеме, не ожидайте, что полирование и зрелость вы найдете в большинстве языков и сред OO. Перехваты Drupals могут быть чрезвычайно непоследовательными, ограниченными в использовании или слишком широкими в использовании.

Слушатели, крючки, являются основным архитектурным принципом обо всем в Drupal.

Ответ 4

Это вопрос высокого уровня, но у меня будет удар.

Drupal - это структура управления контентом, есть хороший обзор здесь.

Drupal басируется на каком-то объекте orineted principals. У него есть проблемы, похожие на MVC. Существует уровень абстракции базы данных, логический уровень и система theming.

При программировании модуля drupal часто рекомендуется использовать один или несколько hooks. Это позволит вам плотно интегрировать ваш код в систему drupal. В core есть много функций, которые вы можете использовать в своих модулях. Используя их, вы уменьшите код, который вы должны написать, а также сделайте свой код более drupalish.