DI

Como implementar un Functor en Drupal y usarlo con DI en un formulario.

Submitted by Oskar on Mon, 27/03/2023 - 20:18

Ando escribiendo un módulo, el cual tiene varios formularios de configuración, y no se me ocurrió otra cosa que crear un formulario base que inyecta todas las dependencias necesarias (de todos los formularios), y a la vez tiene varios métodos además de los métodos estandar de los formularios de Drupal, de tal forma que el resto de formularios únicamente tendrían que extender este formulario para usar los métodos adicionales añadidos y sobreescribir los métodos comunes de los formularios con sus métodos propios.

Desde un punto de vista de DDD se puede justificar en que queda todo dentro del dominio que representa la funcionalidad concreta de ese módulo, pero no terminaba de gustarme la idea de tener un formulario sobrecargado de métodos para que luego el resto de formularios mediante la extensión pudiesen usar los métodos que implementa el formulario padre ya que yo creo que rompe el principio de responsabilidad única al ser sobrecargado con métodos que en algunos casos comparten el resto de formularios pero en otros casos no.

Es por eso que en un principio pensé en hacer una clase de tipo Helper y crear métodos estáticos pero en ese caso me pasaba un poco lo mismo esa clase era un poco como un cajón desastre donde meter todo aquello que no tenía claro donde poner, así se me ocurrió que en vez de eso podría usar Functors 

Así que vamos con el código.

 

Como se puede ver, de esta manera podemos tener múltiples Functors que al ser definidos como servicios no solo se pueden usar en el módulo sino que el día de mañana otro módulo podría llamar también a esos servicios, cada Functor únicamente se encargaría de su propia lógica (Principio de Responsabilidad Única), y simplemente se tienen que inyectar en los formularios.

Subscribe to DI