Além Apresentação-abstração de controle e outros padrões que são utilizados no núcleo Drupal , existem outros padrões de projeto proeminente utilizados nos mais módulos contribuíram populares como Views, CCK, e recursos?
Além Apresentação-abstração de controle e outros padrões que são utilizados no núcleo Drupal , existem outros padrões de projeto proeminente utilizados nos mais módulos contribuíram populares como Views, CCK, e recursos?
Respostas:
Um ponto de partida é o próprio núcleo e os padrões expostos ao contrib. - Um ótimo artigo de Larry Garfield (Crell) pode ser encontrado em um artigo do Drupal Watchdog .
Observadores, visitantes e espreitadelas
Drupal é na verdade construído sobre os padrões gêmeos de Observer e Visitor, embora não os chame pelo nome. Em vez disso, os chama de ganchos.
hook_node_load()
,hook_user_login()
etc. são, em essência, observadores em nós e usuários.hook_form_alter()
,hook_node_view()
E assim por diante são, em essência, os visitantes. Como o Drupal não diferencia os dois, alguns ganchos podem ser considerados os dois padrões, mas o princípio é o mesmo.Fábricas e comandos
Existem várias variações no padrão Factory, mas todas se resumem à mesma idéia: um objeto, um cliente, pede a outro objeto, uma fábrica, uma implementação apropriada de um pedaço de lógica, mas não se importa com o que é. . Isso depende da fábrica decidir. Considere a
db_insert()
função, cujos bits importantes são mostrados abaixo:function db_insert($table, array $options = array()) { // ... return Database::getConnection($options['target'])->insert($table, $options); }
O
Database::getConnection()
método é uma fábrica que retorna um objeto de conexão apropriado para este site.Injeção de Dependência do Doutor Drupal
No Drupal 6, o sistema de menus foi destruído e reescrito para ser um processo de várias etapas. Agora, implementaríamos a mesma chamada de retorno de página assim:
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. }
Nesta nova configuração, o roteador de menus fica mais complexo. Em troca, no entanto, o retorno de chamada da página obtém o nó do qual depende passado para ele, ou seja, injetado nele. Isso nos dá uma série de benefícios.
Ir para Broke (r)
Uma abordagem comum é alguma variação na ideia de um corretor ou mediador. Nesse design, um objeto não solicita informações de outro objeto diretamente. Em vez disso, solicita que um objeto intermediário, que pode ter sido injetado nele, faça essa solicitação em seu nome. Embora ainda signifique que o primeiro objeto precisa solicitar informações ativamente, ele está fortemente acoplado ao objeto mediador e não à miríade de outros objetos dos quais ele pode precisar solicitar informações. Isso significa que, se esses outros sistemas mudarem, precisamos apenas atualizar o mediador, e não todos os sistemas que o tocam.