Una buena práctica en Laravel es mantener nuestros controladores lo menos verticales posibles, o sea, que haya la menor cantidad de código en cada uno de sus métodos.
Es por eso, que Laravel nos brinda distintos tipos de clases que nos ayudan a mantener nuestros controladores delgados. Por ejemplo, los Form Request.
Ahora bien, pero qué pasa con las respuestas de los controladores? Nosotros estamos acostumbrados a que los controladores devuelvan una vista o una respuesta (que puede ser con métodos como back()
, abort()
, o una respuesta json
, etc.). Pero, a veces los controladores nos quedan algo feos.
Por ejemplo, cuando queremos pasar muchas variables a la vista. La función view()
nos queda demasiado extensa haciendo que el método del controlador quede demasiado extenso, también.
Normalmente, una página de un artículo no solo muestra el contenido del mismo. Si no que también puede mostrar la cantidad total de visitas al artículo, los comentarios, sus tag y, hasta puede tener, artículos relacionados, entre otras cosas más.
¿Notan como nuestro método se empieza a agrandar por la cantidad de variables que le estamos pasando a la vista?
Bueno, este sería un buen caso para agregar elegancia a nuestro código utilizando una clase Responsable.
Mejorando el código del Controlador
Para esto, vamos a crear una carpeta llamada Responsables dentro de la carpeta Http. Y aquí adentro, vamos a crear una clase que manejara la respuesta del método show.
Así que, a esta nueva clase le vamos a poner de nombre PostShow para identificar la respuesta que maneja y a que método pertenece.
Para que PostShow sea una clase que maneje respuestas, vamos a implementar la interfaz Responsable.
La interfaz Responsable para manejar respuestas
En esta clase vamos a agregar todo el código necesario que tenga que ver con la respuesta. Lo único que nos pide la interfaz, es escribir el código del método toResponse(), que será el encargado de devolver la vista, la redirección o cualquier cosa que iba a hacer nuestro controlador.
Clase PostShow como Responsable
Para el ejemplo anterior, nuestro clase PostShow quedaría así:
Refactorizando nuestro Controller
Haciendo las siguientes modificaciones al método show del controller, ya podremos utilizar nuestra clase PostShow.
¿Mucho mas limpio no? Pero, aun hay mas! 😉
Respuestas más testeables
Además de agregarle elegancia a nuestro código, hay una segunda cuestión por la cual deberíamos utilizar las clases Responsables. Y es que, hacen nuestro código mucho más testeable. Por ejemplo, agregando métodos para cada uno de los parámetros, así:
De esta forma, podríamos crear un test unitario para cada uno de estos métodos y asegurarnos que devuelvan lo que esperamos. Y así, nuestro código queda totalmente cubierto.
Versión disponible
Tengan en cuenta que la interfaz Responsable esta disponible desde la versión 5.5 de Laravel.
Conclusión
Este fue un ejemplo muy simple pero vimos como las clases Responsables nos ayudan mucho a dividir el código y, al igual que los Form Request, hacen que cada clase se encargue de su tarea.
Si tienes controladores con respuestas complejas, seria bueno que pienses en utilizar este tipo de clases. Espero que te haya gustado. Nos vemos en la próxima. 😉🤙
Excelente post! Justo lo que estaba necesitando. Muchas gracias por compartir tus conocimientos.
Muchas gracias Jose. Volve a pasar cuando quieras.
Cómo sería la implementación de los Responsables al crear un nuevo registro?