Post Top Ad

Your Ad Spot

martes, 28 de julio de 2020

Patrón de repositorio de Laravel

patrón de repositorio

El patrón de repositorio puede ser muy útil para mantener su código un poco más limpio y más legible. De hecho, no tiene que usar Laravel para usar este patrón de diseño en particular. Sin embargo, para este episodio, usaremos el marco php orientado a objetos Laravel para mostrar cómo el uso de repositorios hará que nuestros controladores sean un poco menos detallados, más acoplados y más fáciles de leer. ¡Saltemos!


Trabajando sin repositorios

¡El uso de repositorios no es obligatorio! Puede lograr muchas cosas grandiosas en sus aplicaciones sin usar este patrón, sin embargo, con el tiempo puede estar pintando en una esquina. Por ejemplo, al elegir no utilizar repositorios, su aplicación no se prueba fácilmente y el intercambio de implementaciones sería engorroso. Veamos un ejemplo.

Obtener listados de casas de una base de datos de bienes raíces

HousesController.php

Este sería un código bastante típico para usar Eloquent para interactuar con la base de datos que contiene listados de casas en venta. Funcionará bien, pero el controlador ahora está estrechamente acoplado a Eloquent. Podemos inyectar un repositorio en su lugar para crear una versión débilmente acoplada del mismo código. Este acoplamiento flojo facilita el intercambio de implementaciones en un momento posterior.


Trabajando con repositorios

Hay un buen número de pasos para completar todo el patrón de repositorio, pero una vez que lo revisas varias veces se convierte en una segunda naturaleza. Vamos a cubrir cada paso aquí.

  • 1: Crear la carpeta del repositorio

  • Recientemente vimos una estructura de archivo Laravel común que podría estar usando. Esto crea una carpeta en el appdirectorio para contener todos los archivos específicos de su dominio. Para este ejemplo, crearemos repotutrepositoriesdentro de nuestra appcarpeta para contener nuestros archivos. Esto también configura nuestra estructura de espacio de nombres que tendremos que tener en cuenta para los archivos que creamos.

  • 2: Crea tu interfaz

  • El siguiente paso es crear la interfaz que determinará el contrato que nuestro repositorio debe implementar. Esto solo establece los métodos que deben estar presentes en nuestro repositorio. Nuestra interfaz tendrá el siguiente aspecto. Tenga en cuenta el espacio de nombres y los métodos que usaremos.

    HouseRepositoryInterface.php

  • 3: Crea tu repositorio

  • Ahora podemos crear el repositorio que hará todo el trabajo pesado por nosotros. Es en este archivo donde podemos poner todas nuestras consultas detalladas de Eloquent, sin importar cuán complejas puedan llegar a ser. Cada método simplemente tiene un nombre personalizado para que en nuestro controlador, podamos escribir un código muy corto para obtener el resultado deseado. Nuevamente observe el espacio de nombres y la use House;declaración.

    DbHouseRepository.php

  • 4: Crear proveedor de servicios de fondo

  • Para nuestro controlador, vamos a escribir sugerencia una interfaz. Vamos a hacer una inyección de dependencia, pero esencialmente a través de una interfaz. Lo que esto significa es que necesitamos registrar la interfaz con Laravel para que sepa qué implementación de nuestra interfaz queremos usar. Primero usaremos una implementación Eloquent, pero luego pasaremos a una implementación basada en archivos para mostrar cómo podemos intercambiar implementaciones fácilmente usando una interfaz. Colocamos este proveedor de servicios en el mismo espacio de nombres que nuestros otros archivos hasta ahora.

    BackendServiceProvider.php

    Básicamente, este código dice que, cuando ve el tipo de controlador insinuando HouseRepositoryInterface, sabemos que desea utilizar el DbHouseRepository.

  • 5: Actualice su matriz de proveedores

  • Ahora que hemos creado un nuevo proveedor de servicios, necesitamos agregar esto a la providersmatriz dentro app/config/app.phpPuede parecer algo así una vez completado:

  • 6: Actualice su controlador para la inyección de dependencia

  • Tenemos la mayoría de las bases establecidas. Ahora podemos actualizar el Controlador para facilitar la inyección de una implementación de HouseRepositoryInterface. Esto nos permitirá eliminar cualquier llamada a Eloquent directamente en el Controlador, y reemplazarlas con llamadas a métodos personalizados simples. Nuestro controlador actualizado podría verse así:

    HousesController.php

  • 7: Confirmar que las rutas son correctas

  • Para este ejemplo, simplemente configuramos un recurso de ruta así:

  • 8: Actualizar composer.json

  • Si aún no lo ha hecho, asegúrese de que el espacio de nombres al que hacemos referencia esté en su composer.json. Tenga en cuenta la adición de "psr-4":{"repotut\": "app/repotut" }que le dice al compositor que cargue automáticamente las clases dentro del repotutespacio de nombres.

    ¡No olvide ejecutar composer dumpdespués de la actualización composer.json!


Whoa! Buen compañero de trabajo, probémoslo en el navegador. Podemos visitarhttp://localhost/repotut/public/housesy podemos ver que tenemos 3 casas en venta, cada una de un color diferente.

Patrón de repositorio de Laravel


Implementaciones fáciles de cambiar

Digamos que en el futuro usted decide que Eloquent no es la forma en que desea manejar el almacenamiento de datos con su aplicación. ¡No hay problema! Como ya ha establecido las bases para usar una interfaz, puede crear un nuevo repositorio y cambiar el proveedor de servicios. Veamos cómo podemos intercambiar implementaciones.

  • 1: Crear un nuevo repositorio

  • Solo usaremos un ejemplo rápido aquí. Supongamos que se trata de una clase de sistema de archivos completa que proporciona almacenamiento de datos a través de archivos planos. En nuestro caso, solo pondremos algo de lógica simple para probar las implementaciones de intercambio. Tenga en cuenta que esta clase implementa los mismos métodos exactos que la versión Eloquent que probamos anteriormente.

    FileHouseRepository.php

  • 2: Actualizar proveedor de servicios

  • Ahora en el proveedor de servicios, todo lo que tenemos que hacer es cambiar una sola línea de código. Simplemente le decimos a Laravel que ahora, cuando vea el HouseRepositoryInterface, usará el FileHouseRepository en lugar del DbHouseRepository.

Cuando lo probamos en el navegador http://localhost/repotut/public/houses, podemos ver que la nueva implementación realmente ha surtido efecto, ¡genial!
Implementación de intercambio de repositorio

Repositorios Conclusión

Como puede ver, parece que hay muchos pasos para que los repositorios funcionen en su aplicación. Hay algunos pasos involucrados, sin duda. Sin embargo, si va a ser responsable de mantener un código a largo plazo, obtendrá los beneficios de tomarse el tiempo para diseñar correctamente su aplicación al principio. Considérelo una forma de gratificación retrasada, que en la actualidad parece un arte olvidado.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas