Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)

Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.

He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!

#MayTheRigorBeWithYou

  • Fran Iglesias

    Hola Carlos. Una explicación muy clara y sencilla.

    Me surge una consulta derivada. En el ejemplo, montas los listeners en el controller un poco “a medida” del UseCase, cosa que me llamó la atención, aunque ya había visto algo por ahí.

    Creo que en parte vas a responder en un próximo vídeo al hablar de los CommandBus. Precisamente estoy haciendo algunas cosas usando CommandBus/EventBus (de hecho, escribí un paquete de buses) y, en mi caso, monto los listeners en la configuración del Container (uso el de Symfony). Y ahí es donde tengo la duda.

    Por un lado, cargar el EventDispatcher donde yo lo hago (en el DIC) me resulta un poco coñazo y no sé si tendrá malas consecuencias a la larga, entre ellas tener en un solo sitio todos los listeners de una aplicación, lo cual me parece bastante caótico. Pero, por otro, parece el sitio obvio. La cuestión es: ¿hay un punto intermedio para hacerlo?

    Gracias.

    • Carlos Buenosvinos Zamora

      Fran, gracias por el comentario!

      Es como dices. En los próximos videos veremos cómo montar los listeners desde con decoradores sencillos hasta con un command bus. Creo que lo comento en este video.

      Sobre dónde montar el CommandBus, depende de tu framework. Es decir, mientras esté montado una vez ejecutas el Application Service o el Command Handler, da un poco igual cómo lo has montado.

      Si no tienes DIC, lo podrías hacer a mano en el Bootstrapping de tu aplicación. Por ejemplo, en Silex se mete en el App y listos. Con Symfony, puedes crearte un servicio tú mismo en el DIC o usar un CommandBus espcífico y su Bundle de turno (que hace lo mismo).

      En resumen, en el lado del framework/infraestructura, en su bootstrapping, y como quieras (a mano o con DIC). He respondido a tu pregunta?