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?
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?
Risposte:
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.