Помимо Presentation-abstraction-control и других шаблонов , которые используются в ядре Drupal , есть ли какие-либо другие шаблоны проектирования, широко используемые в наиболее популярных дополнительных модулях, таких как Views, CCK и Features?
Помимо Presentation-abstraction-control и других шаблонов , которые используются в ядре Drupal , есть ли какие-либо другие шаблоны проектирования, широко используемые в наиболее популярных дополнительных модулях, таких как Views, CCK и Features?
Ответы:
Начать нужно с самого ядра и шаблонов, доступных для 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)
Одним из распространенных подходов является некоторая вариация идеи брокера или посредника. В этом проекте объект не запрашивает информацию у другого объекта напрямую. Вместо этого он просит посредника, который мог быть введен в него, сделать такой запрос от его имени. Хотя это все еще означает, что первый объект должен активно запрашивать информацию, он только тесно связан с объектом-посредником, а не с множеством других объектов, от которых ему может потребоваться запросить информацию. Это означает, что если эти другие системы изменятся, нам нужно только обновить медиатор, а не каждую систему, которая его касается.