Inyección de dependencias
https://laravel.com/docs/5.1/controllers
Inyección de dependencias en Laravel 8
Hola, ¿Cómo están? Muy buenas a todos continuando con el curso de Laravel nivel intermedio, hoy veremos lo que son la inyección de dependencias en Laravel 8 también llamado Service Container.
¿Qué es la inyección de dependencias?
La inyección de dependencias es un patrón de diseño de la programación orientada a objetos POO que nos permite disminuir el acoplamiento entre componentes, parte del principio de separar el código por responsabilidades, esto quiere decir que una clase suministra sus métodos y variables a otra clase atreves de objetos que cumplen contratos que necesita la clase para poder funcionar.
Service Container de Laravel
El contenedor de servicios de Laravel es una de las herramientas más poderosas del framework sirve para administrar las dependencias de clases, crear objetos y realizar la inyección de dependencias a través de un constructor o métodos.
Aplicar inyección de dependencias
En nuestra aplicación crearemos una carpeta llamada Repositories en la ruta App/, esta carpeta contendrá toda la lógica de accesos a datos como consultas a nuestra base de datos con Eloquent, así mantener más limpio y legible nuestros controladores y modelos.
Dentro de la carpeta Repositories creamos un archivo CursoRepository.php y empezaremos a escribir código, abrimos la etiquetas de apertura de código PHP, seguidamente especificamos nuestro namespace App\Repositories y creamos la clase CursoRepository.
En nuestra clase creamos un objeto $cursos de tipo protected para evitar que la propiedad pueda ser modificada. Seguidamente, creamos el constructor que debe recibir un parámetro de la clase que acabamos de crear.
Al parámetro debemos asignarle al objeto $cursos. Finalmente en nuestros métodos utilizaremos el objeto $cursos a la cual asignamos el valor desde el constructor.
Uso de inyección de dependencias
En primer lugar, en el método index de nuestro controlador CursoController creado en anteriores clases, si observamos el código no es tan legible y contiene bastante código que puede ser optimizado.
Método obtener cursos
Primero, en nuestra archivo CursoRepository importamos las referencias del modelo Curso y la clase DB.
En la primera línea de código del método index la variable $cursos obtiene los datos de una consulta; toda esta consulta la llevaremos al método obtenerCursos() que crearemos en nuestra clase CursoRepository donde pegaremos todo el código de la consulta y retornaremos el resultado.
Ahora veremos otro ejemplo en el mismo método index de nuestro controlador CursoController, dentro de la bucle foreach hay una consulta a la base de datos que se está realizando y almacenando en la variable $cursos[]->alumnos.
Este código de la consulta le pasaremos al método obtenerAlumnosQueEstanInscritosEnUnCurso() que crearemos en nuestra clase CursoRepository donde recibe un parámetro $curso_id.
De igual manera procedemos esta vez con el método show del controlador CursoController. Primeramente, crearemos el método obtenerCurso() en nuestra clase CursoRepository que recibirá un parámetro $curso_id.
Seguidamente, copiar y pegar todo el código de la consulta y con return devolvemos el resultado.

Comentarios
Publicar un comentario