Как работает АОП в Drupal?

Как работает АОП (аспектно-ориентированное программирование) в Drupal. Я узнал об АОП с точки зрения его использования для ведения журнала и безопасности, но как он применим к Druoal?

Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Разработка Drupal и AngularJS: Идеальное сочетание для вашей веб-стратегии
Разработка Drupal и AngularJS: Идеальное сочетание для вашей веб-стратегии
Один опытный веб-разработчик назвал комбинацию Drupal и AngularJS "сочетанием, созданным на небесах". Почему так? Потому что вместе они могут создать...
5
0
1 210
2

Ответы 2

drupal имитирует парадигмы АОП с помощью хуков, которые в основном позволяют разработчикам вплетать фрагменты кода в поток выполнения. вы можете взглянуть на хуки, которые разработчик может реализовать здесь.

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

Drupal - это «мультипарадигмальный» фреймворк, и только некоторые его части реализуют «своего рода» АОП:

  • Например, функция render () в Drupal 7 преобразует набор вложенных массивов в выходной HTML-код, выбирая соответствующие шаблоны на основе основных правил приоритета: таким образом, Drupal во многом похож на механизм преобразования XSLT, в который берутся файлы шаблонов вашей темы. вместе составляют входной файл .xsl, а гнездо входного массива является исходным файлом .xml. Это означает, что в том, как работает тематика, есть что-то элегантно функциональное.
  • Кроме того, уровень абстракции базы данных D7 близок к «прямой» объектной ориентации, хотя, как отмечает Ларри (см. Ниже), в этом объектно-ориентированном уровне присутствует небольшое количество квази-АОП.

Парадигму АОП в Drupal можно было бы лучше представить как управляемую событиями, и все это происходит с помощью концепции хуков в Drupal. Например, когда вы делаете следующее:

  • напишите модуль под названием mymodule
  • в mymodule.module создайте функцию с именем mymodule_init()
  • включить этот модуль в Drupal

то, что вы объявляете, в псевдокоде:

subscribe mymodule to "hook events" of type init

Когда ядро ​​Drupal запускает module_invoke_all('init') (называемый в _drupal_bootstrap_full() - код доступен здесь), это говорит Drupal

notify all subscribers to "hook events" of type init that this has occurred
 by passing any relevant arguments to them
 and letting them run the code they define in their hook_init()

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

Таким образом, Drupal может превращать свои собственные фазы выполнения в квази-АОП, определяя суставные точки (функции module_invoke*()) и позволяя вам написать свой собственный Pointcuts (ваша функция mymodule_*(). Соглашение об именах должно соответствовать имени ловушки Drupal).

Для получения дополнительной информации об этом, и особенно о мультипарадигматической природе Drupal, попробуйте Отличный блог Ларри Гарфилда.

Другие вопросы по теме