Además del control de abstracción de presentación y otros patrones que se utilizan en el núcleo de Drupal , ¿hay otros patrones de diseño utilizados de manera prominente en los módulos contribuidos más populares como Vistas, CCK y Características?
Además del control de abstracción de presentación y otros patrones que se utilizan en el núcleo de Drupal , ¿hay otros patrones de diseño utilizados de manera prominente en los módulos contribuidos más populares como Vistas, CCK y Características?
Respuestas:
Un lugar para comenzar es con el núcleo mismo y los patrones expuestos a contrib. - se puede encontrar una gran reseña de Larry Garfield (Crell) en un artículo de Drupal Watchdog .
Observadores, visitantes y mirones
Drupal en realidad se basa en los patrones gemelos de Observador y Visitante, aunque no los llama por su nombre. En cambio, los llama ganchos.
hook_node_load()
,hook_user_login()
Y así sucesivamente son, en esencia, los observadores en los nodos y usuarios.hook_form_alter()
,hook_node_view()
y así sucesivamente son, en esencia, visitantes. Debido a que Drupal no diferencia entre los dos, podría decirse que algunos ganchos podrían considerarse ambos patrones, pero el principio es el mismo.Fábricas y comandos
Existen varias variaciones en el patrón Factory, pero todas se reducen a la misma idea: un objeto, un cliente, le pide a otro objeto, una fábrica, la implementación adecuada de una pieza de lógica, pero no le importa cuál sea . Eso depende de la fábrica para decidir. Considere la
db_insert()
función, cuyos bits importantes se muestran a continuación:function db_insert($table, array $options = array()) { // ... return Database::getConnection($options['target'])->insert($table, $options); }
El
Database::getConnection()
método es una fábrica que devuelve un objeto de conexión apropiado para este sitio.Inyección de dependencia del doctor Drupal
En Drupal 6, el sistema de menús fue destripado y reescrito para ser un proceso de varios pasos. Ahora implementaríamos la misma devolución de llamada de página como esta:
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. }
En esta nueva configuración, el enrutador de menú se vuelve más complejo. Sin embargo, a cambio, la devolución de llamada de la página obtiene el nodo del que depende, se le inyecta. Eso nos da una serie de beneficios.
Ir por Broke (r)
Un enfoque común es alguna variación en la idea de un corredor o mediador. En este diseño, un objeto no solicita información de otro objeto directamente. En cambio, le pide a un objeto intermediario, que puede haber sido inyectado en él, que haga dicha solicitud en su nombre. Si bien todavía significa que el primer objeto tiene que solicitar información activamente, solo está estrechamente vinculado al objeto mediador y no a la miríada de otros objetos de los que puede necesitar solicitar información. Eso significa que si esos otros sistemas cambian, solo necesitamos actualizar el mediador, no todos los sistemas que lo tocan.