Quali sono alcuni modelli di progettazione che si trovano in importanti moduli forniti?


10

Oltre al controllo di astrazione della presentazione e ad altri pattern che sono usati nel core di Drupal , ci sono altri pattern di design prominentemente usati nei moduli contributivi più popolari come Views, CCK e Features?


2
Come riportato nella domanda frequente , "Dovresti solo porre domande pratiche e rispondenti in base ai problemi reali che affronti. Le domande chiacchierate e aperte riducono l'utilità del nostro sito e spingono altre domande dalla prima pagina".
kiamlaluno

1
questo potrebbe essere un buon argomento wiki della comunità
Chaulky,

Community Wiki non viene più utilizzato per domande inaccettabili o al limite. Vedi il futuro del Wiki della community .
kiamlaluno

2
Dall'altro lato, penso che questo sia un argomento interessante. Suggerimento per una domanda migliore: "Esiste un modello di progettazione in grado di risolvere il problema X?". Perché è a questo che servono i modelli di progettazione, risolvendo un problema, non dovrebbero essere usati solo per essere usati.
Berdir,

1
@kiamlaluno, direi che la domanda non è senza risposta, chiacchierone o poco pratica, sebbene possa essere senza dubbio aperta. Il mio scopo nel porre la domanda è quello di capire meglio come vengono utilizzati i modelli di progettazione, nel codice che conosco in qualche modo.
Matt V.

Risposte:


10

Un punto di partenza è con il nucleo stesso e gli schemi esposti al contributo. - un ottimo articolo di Larry Garfield (Crell) può essere trovato in un articolo di Drupal Watchdog .

Osservatori, visitatori e guardoni

Drupal è in realtà basato sui modelli gemelli di Observer e Visitor, anche se non li chiama per nome. Invece, li chiama ganci. hook_node_load(), hook_user_login()e così via sono, in sostanza, osservatori su nodi e utenti. hook_form_alter(), hook_node_view()e così via sono, in sostanza, visitatori. Poiché Drupal non fa distinzioni tra i due, alcuni hook potrebbero essere probabilmente considerati entrambi i modelli, ma il principio è lo stesso.

Fabbriche e comandi

Esistono diverse varianti del modello Factory, ma tutte si riducono alla stessa idea: un oggetto, un client, chiede a un altro oggetto, una factory, un'implementazione appropriata di un pezzo di logica, ma non importa quale sia . Sta alla fabbrica decidere. Considera la db_insert()funzione, i cui bit importanti sono mostrati di seguito:

   function db_insert($table, array $options = array()) {
       // ...
       return Database::getConnection($options['target'])->insert($table, $options);
     }

Il Database::getConnection()metodo è un factory che restituisce un oggetto connessione appropriato per questo sito.

Doctor Drupal's Dependency Injection

In Drupal 6, il sistema di menu è stato sventrato e riscritto per essere un processo in più passaggi. Ora implementeremmo la stessa callback della pagina in questo modo:

   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.
     }

In questa nuova configurazione il router del menu diventa più complesso. In cambio, tuttavia, il callback della pagina ottiene il nodo da cui dipende, cioè iniettato in esso. Questo ci dà una serie di vantaggi.

Go for Broke (r)

Un approccio comune è una variazione sull'idea di un mediatore o mediatore. In questo progetto, un oggetto non richiede informazioni direttamente da un altro oggetto. Invece, chiede a un oggetto intermedio, che potrebbe essere stato iniettato al suo interno, di effettuare tale richiesta per suo conto. Sebbene significhi ancora che il primo oggetto deve richiedere attivamente informazioni, è strettamente accoppiato all'oggetto mediatore e non alla miriade di altri oggetti da cui potrebbe richiedere informazioni. Ciò significa che se questi altri sistemi cambiano, dobbiamo solo aggiornare il mediatore, non tutti i sistemi che lo toccano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.