Las mejores prácticas para construir módulos usando clases

19

Estoy buscando comenzar a construir mis módulos como clases ahora que la carga lenta / automática está en Drupal 7, y me encantaría ver algunos módulos (contrib o core) que están haciendo un gran trabajo.

¿Hay una manera creativa de integrar una clase como ganchos? ¿Implemento cada característica como un complemento de ctools?

Cualquier transeúnte debe tener en cuenta que D7 tiene nuevas files[]declaraciones en los .infoarchivos del módulo para clases / interfaces de carga automática / diferida: escritura de archivos .info (Drupal 7.x) .

La siguiente es una buena lectura para obtener las motivaciones y la constitución (por así decirlo) de la comunidad de Drupal. Programación de Drupal desde una perspectiva orientada a objetos .

electblake
fuente

Respuestas:

16

Un módulo no es una clase de Crell, es lo que debe leer primero.

La mayor parte de OOP en Drupal 7 es la nueva capa de abstracción de la base de datos (diseñada por el mismo Crell y otros). Eso implementa muchos patrones que pueden y deben ser reutilizados.

Por ejemplo:

Algo que aún se discute controversialmente es el ocultamiento de información . DBTNG lo implementa haciendo que las propiedades de clase estén protegidas y no permita el acceso directo. Por otro lado, tenemos hook_query_alter () y se pueden cambiar casi libremente con varios métodos getter de referencia .

Berdir
fuente
¡Gran respuesta, toneladas de excelentes recursos para actualizar mi pensamiento al estructurar el código de mi módulo!
electblake
3

Esta es una pregunta interesante.

La idea de un módulo Drupal como clase es muy interesante. Sin embargo, incluso en los módulos D7, simplemente implemente las funciones de enlace que se verifican por nombre, por lo que incluso si crea una clase para su módulo, deberá implementar funciones de enlace para invocarlas.

Sin embargo, muchos módulos usan clases internamente y exponen la funcionalidad a través de estas clases. El ejemplo más obvio son las vistas. Así que ese puede ser un buen lugar para buscar. Sin embargo, tenga en cuenta que muchos módulos usan clases a su manera, por lo que lo que aprende al mirar las vistas puede no ser siempre aplicable.

Jeremy French
fuente
Gracias por la información, y presumí que aún necesitaría tener hook_functions para registrarme correctamente en Drupal, pero tengo curiosidad sobre cómo los módulos lo implementan. Echaré un vistazo al módulo de vistas (y espero que no se pierda): actualice su respuesta si encuentra más casos aislados / ejemplos de patrones que encuentre: D
electblake
2

La API de entidad (el módulo contrib) le permite declarar una "clase de entidad" para cada uno de sus tipos de entidad, por lo que todo el código relacionado con su entidad (crear, cargar, guardar, acceder, etc.) puede ir en una clase (vea cómo Organic Grupos lo hace, por ejemplo).

Dicho eso, no te excedas. Los complementos de ctools son buenos cuando los necesita (está escribiendo las próximas Vistas, Paneles o Reglas), pero usar clases en todas partes solo por pureza ideológica no le servirá de mucho.

Bojan Zivanovic
fuente