2008-09-24 11 views
5

Cómo funciona AOP (Programación Orientada a Aspectos) en Drupal. He aprendido sobre AOP en términos de usarlo para el registro y la seguridad, pero ¿cómo se aplica a Druoal?¿Cómo funciona AOP en Drupal?

Respuesta

4

drupal imita paradigmas de AOP a través de ganchos, que básicamente permiten a los desarrolladores tejer en bits de código durante el flujo de ejecución. puede echar un vistazo a los ganchos que un desarrollador puede implementar here.

como un ejemplo rápido, si estuviera desarrollando un nuevo módulo basado en nodos (los nodos son el formulario de datos básico en drupal), tengo acceso instantáneo a comentarios y taxonomía sin ningún trabajo adicional de mi parte. los módulos de comentario y taxonomía tienen la capacidad de conectarse a los nodos y proporcionar esa funcionalidad adicional. entonces, en ese sentido, no tengo que dar cuenta de esas características en mi programa, pero puedo aprovechar esa flexibilidad.

1

Drupal es un marco "multi-paradigma", y sólo ciertas partes de él implementar "una especie de" AOP:

  • Drupal 7 de render() la función, por ejemplo, convierte un conjunto de matrices anidadas en HTML de salida seleccionando plantillas apropiadas basadas en reglas de precedencia básicas: de esta manera, Drupal se comporta de forma similar a un motor de transformación XSLT, donde los archivos de plantilla de su tema juntos constituyen un archivo .xsl de entrada y el nido de matriz de entrada es la inicial. archivo xml Esto significa que hay algo elegantemente funcional en la forma en que funciona el tema.
  • Además, la capa de abstracción de la base de datos D7 está cerca de la orientación de objetos "rectos", aunque como observa Larry (ver más adelante), hay una pequeña cantidad de casi AOP en esta capa OO.

El paradigma AOP de Drupal se puede visualizar mejor como controlado por eventos, y todo sucede a través del concepto de ganchos de Drupal. Por ejemplo, cuando hace lo siguiente:

  • escribir un módulo llamado mimodulo
  • en mymodule.module, crear una función llamada mymodule_init()
  • habilitar este módulo en Drupal

lo que eres declarar es, en pseudocódigo:

subscribe mymodule to "hook events" of type init 

Cuando el núcleo de Drupal ejecuta module_invoke_all('init') (llamados en _drupal_bootstrap_full() - code available here) esto es Drupal diciendo

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() 

Así, mientras que PHP es todavía un lenguaje de procedimientos - y su mymodule_init() podría hacer todo tipo de cosas no encapsulados locos si realmente quería - Drupal todavía está a cargo . Drupal en cierto sentido decide si llamar o no a su código en primer lugar.

De esta manera, Drupal es capaz de convertir sus propias fases de ejecución en cuasi-AOP, definiendo puntos conjuntas (los module_invoke*() funciones) y que le permite escribir sus propios pointcuts (su función mymodule_*(). Cuya denominación la convención debe coincidir con el nombre del gancho de Drupal.)

Para obtener más información acerca de esto, y la naturaleza multi-paradigmática de Drupal especialmente, intente Larry Garfield's excellent blogpost.