¿Cuáles son algunos patrones de diseño que se encuentran en módulos destacados contribuidos?

10

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?

Matt V.
fuente
2
Como se informa en las preguntas frecuentes , "Solo debe hacer preguntas prácticas y que respondan en función de los problemas reales que enfrenta. Las preguntas charlatanas y abiertas disminuyen la utilidad de nuestro sitio y eliminan otras preguntas de la página principal".
kiamlaluno
1
esto podría ser un tema de wiki de la comunidad bueno aunque
Chaulky
Community Wiki ya no se usa para preguntas que no son aceptables o que están en el límite. Ver El Futuro de la Wiki de la Comunidad .
kiamlaluno
2
Por otro lado, creo que este es un tema interesante. Sugerencia para una mejor pregunta: "¿Hay un patrón de diseño que pueda resolver el problema X?". Debido a que para eso sirven los patrones de diseño, para resolver un problema, no deben usarse solo para que se usen.
Berdir
1
@kiamlaluno, diría que la pregunta no es sin respuesta, conversadora o poco práctica, aunque podría decirse que es abierta. Mi propósito al hacer la pregunta es tener una mejor idea de cómo se usan los patrones de diseño, en un código con el que estoy familiarizado.
Matt V.

Respuestas:

10

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.

kiamlaluno
fuente