Prática recomendada para criar módulos usando classes

19

Estou querendo começar a construir meus módulos como classes agora que o preguiçoso / carregamento automático está no Drupal 7 e adoraria ver alguns módulos (contrib ou core) que estão fazendo um ótimo trabalho.

Existe uma maneira criativa de integrar uma classe como ganchos? Eu implemento cada recurso como um plugin ctools?

Qualquer transeunte deve observar que o D7 possui novas files[]declarações nos .infoarquivos do módulo para classes / interfaces de carregamento automático / lento: Gravando arquivos .info (Drupal 7.x) .

A seguir, é uma boa leitura para obter as motivações e a constituição (por assim dizer) da comunidade Drupal da programação Drupal de uma perspectiva orientada a objetos .

electblake
fonte

Respostas:

16

Um módulo não é uma classe de Crell é o que você deve ler primeiro.

A maior parte de POO no Drupal 7 é a nova camada de abstração de banco de dados (projetada pelo mesmo Crell e outros). Isso implementa muitos padrões que podem e devem ser reutilizados.

Por exemplo:

Algo que ainda é discutido controversamente é a ocultação de informações . O DBTNG implementa isso, tornando as propriedades da classe protegidas e proibindo o acesso direto. Por outro lado, temos hook_query_alter () e eles podem ser alterados quase livremente com vários métodos de referência getter .

Berdir
fonte
ótima resposta, toneladas de ótimos recursos para atualizar meu pensamento ao estruturar o código do meu módulo!
Electblake
3

Esta é uma pergunta interessante.

A ideia de um módulo Drupal como classe é muito interessante. No entanto, mesmo nos módulos D7, basta implementar funções de gancho que são verificadas pelo nome; portanto, mesmo se você criar uma classe para o seu módulo, ainda precisará implementar funções de gancho para invocá-las.

No entanto, muitos módulos usam classes internamente e expõem a funcionalidade por meio dessas classes. O exemplo mais óbvio são visualizações. Portanto, esse pode ser um bom lugar para procurar. No entanto, esteja ciente de que muitos módulos usam classes à sua maneira, portanto, o que você aprende com as visualizações pode nem sempre ser aplicável.

Jeremy French
fonte
Obrigado pelo insight, e presumi que ainda precisaria ter funções hook_functions para me registrar corretamente no Drupal, mas estou curioso em saber como os módulos o implementam. Vou dar uma olhada no módulo vistas (e esperemos que não se perder) - por favor, atualize sua resposta se você encontrar mais isoladas casos / exemplos de padrões que você encontrar: D
electblake
2

A API de entidade (o módulo contrib) permite que você declare uma "classe de entidade" para cada tipo de entidade, para que todo o código relacionado à sua entidade (criar, carregar, salvar, acessar, etc.) possa ser inserido em uma classe (veja como Orgânica Grupos faz isso, por exemplo).

Dito isto, não exagere. Os plug-ins do ctools são uma coisa boa quando você precisa deles (você está escrevendo as próximas exibições, painéis ou regras), mas usar classes em todos os lugares apenas por pureza ideológica não fará muito bem.

Bojan Zivanovic
fonte