Какие шаблоны проектирования можно найти в известных дополнительных модулях?

10

Помимо Presentation-abstraction-control и других шаблонов , которые используются в ядре Drupal , есть ли какие-либо другие шаблоны проектирования, широко используемые в наиболее популярных дополнительных модулях, таких как Views, CCK и Features?

Matt V.
источник
2
Как сообщается в разделе « Часто задаваемые вопросы» , «Вы должны задавать только практические, отвечающие на вопросы вопросы, основанные на реальных проблемах, с которыми вы сталкиваетесь. Болтливые, открытые вопросы уменьшают полезность нашего сайта и отталкивают другие вопросы с первой страницы».
kiamlaluno
1
хотя это может быть хорошей вики-темой для сообщества
Chaulky
Сообщество Wiki больше не используется для вопросов, которые не являются приемлемыми или являются пограничными. Смотрите будущее сообщества вики .
kiamlaluno
2
С другой стороны, я думаю, что это интересная тема. Предложение для лучшего вопроса: «Существует ли шаблон проектирования, который может решить проблему X?». Потому что для этого предназначены шаблоны проектирования, решающие проблему, их не следует использовать просто так, чтобы их использовали.
Бердир
1
@kiamlaluno, я бы сказал, что этот вопрос не является неопровержимым, разговорчивым или непрактичным, хотя он может быть открытым. Моя цель при задании этого вопроса - лучше понять, как используются шаблоны проектирования, в коде, с которым я немного знаком.
Мэтт В.

Ответы:

10

Начать нужно с самого ядра и шаблонов, доступных для contrib. - отличная статья Ларри Гарфилда (Крелла) может быть найдена в статье Drupal Watchdog .

Наблюдатели, посетители и подглядывающие томы

Drupal на самом деле построен на основе паттернов-близнецов Observer и Visitor, хотя и не называет их по имени. Вместо этого он называет их хуками. hook_node_load(), hook_user_login()И так далее, по существу, наблюдатели на узлах и пользователей. hook_form_alter(), hook_node_view()И так далее, по существу, посетители. Поскольку Drupal не делает различий между этими двумя типами, некоторые хуки можно считать обоими шаблонами, но принцип один и тот же.

Фабрики и команды

Существует несколько вариантов шаблона фабрики, но все они сводятся к одной и той же идее: один объект, клиент, запрашивает другой объект, фабрику, для соответствующей реализации фрагмента логики, но ему все равно, какой это , Это решать фабрике. Рассмотрим db_insert()функцию, важные биты которой показаны ниже:

   function db_insert($table, array $options = array()) {
       // ...
       return Database::getConnection($options['target'])->insert($table, $options);
     }

Database::getConnection()Метод является завод , который возвращает объект подключения , подходящий для этого сайта.

Инъекция зависимости доктора Друпала

В Drupal 6 система меню была распотрошена и переписана, чтобы стать многоэтапным процессом. Теперь мы реализовали бы такой же обратный вызов страницы, как это:

   function example_menu() {
       $items['node/%node/example'] = array(
         'page callback' => 'example_page',
         'page arguments' => array(1),
         // ...
       );
       return $items;
     }

     function example_page($node) {
       // Do useful stuff here.
     }

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

Перейти на Broke (r)

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

kiamlaluno
источник