Header Ads Widget

Ticker

6/recent/ticker-posts

¿Qué es el contenedor de IoC en Laravel?

 Contenedor de Laravel IoC

¿Entonces estás aprendiendo Laravel, dices? Bueno, ¿qué es este contenedor de IoC del que hablas? Para muchos de nosotros, los programadores de PHP, es posible que no estemos familiarizados con este concepto, pero gracias a Laravel, la ingeniería de software adecuada se está introduciendo en el mundo de PHP. Al manejar qué y cómo funciona el contenedor de IoC en Laravel, comprenderemos mejor cómo Laravel proporciona la magia que hace al codificar. ¡Miremos más de cerca!


Inversión de control

Primero, un poco sobre Inversión de control , en sentido genérico.

Wikepedia nos proporciona esta explicación:

En ingeniería de software, la inversión de control (IoC) es una técnica de programación, expresada aquí en términos de programación orientada a objetos, en la que el acoplamiento de objetos está vinculado en tiempo de ejecución por un objeto ensamblador y normalmente no se conoce en tiempo de compilación mediante análisis estático.

En la programación tradicional, el flujo de la lógica empresarial está determinado por objetos que se asignan estáticamente entre sí. Con la inversión de control, el flujo depende del gráfico de objetos que crea el ensamblador. Este flujo dinámico es posible gracias a que las interacciones de los objetos se definen mediante abstracciones. El proceso de vinculación se logra mediante la inyección de dependencias , aunque algunos argumentan que el uso de un localizador de servicios también proporciona una inversión de control.

¿Qué hablas de Willis? 🙂 Bueno, eso es mucha palabrería decir, básicamente, con una buena ingeniería de software, vamos a hacer tu vida más fácil. ¿Cómo dices eso? Examinemos.

Un contenedor es solo eso, algo que puede contener cosas. En Laravel, el $appobjeto es tu contenedor. Así que es lógico que esto de lo $appque hablas contiene cosas, y si es un hecho, las contiene. Si tuviera que ejecutar este código

Vería una cantidad impía de información vertida en el navegador. Sin embargo, lo principal a tener en cuenta es que es un Objeto de IlluminateFoundationApplicationEl espacio de nombres de illuminate contiene todos los componentes del marco de Laravel. Es un nombre apropiado en la medida en que Laravel está trayendo características de diseño de software de otros lenguajes empresariales al mundo de PHP. Ahora, la clase Application extiende el contenedor.clase. Es de la clase Container que emana la magia. Piense en aprender Laravel, no tanto como un ejercicio de codificación, sino más bien como una expansión de su mente. Proporciona una forma nueva y diferente de ver los problemas y cómo resolverlos con una organización ingeniosa. De hecho, Laravel desafía la definición misma de un marco. Al menos así es como lo pienso.

La clase Container implementa la ArrayAccess interfaz. Lo que esto significa es que tiene flexibilidad al acceder a sus datos. Puedes usar lo que te resulte cómodo. Por ejemplo, podría utilizar las dos versiones de sintaxis siguientes con el mismo resultado:

¡Hábil!

El contenedor se compone de muchas capas o componentes , como enrutamiento , validación , autenticación , cookies , base de datos , cifrado , sesión , sistema de archivos y muchos más. ¡El contenedor empaqueta cuidadosamente todos estos componentes para trabajar en conjunto y brindarle superpoderes de PHP !

Inyección de dependencia

La inyección de dependencia es excelente, pero puede convertirse en una molestia de implementar si tiene que crear instancias y pasar dependencias continuamente, pero con el contenedor de IoC , no tenemos que preocuparnos por eso.

Entonces, ¿cómo funciona todo esto en código? Bueno, preparemos algunas clases y veámoslo en acción. Vamos a añadir una CarTireEngineclase. Sabemos que la clase App extiende el contenedor , por lo que tenemos acceso a sus métodos. Sigamos adelante y vinculemos nuestra Carclase al contenedor .

Excelente - Cuando se corre makea través de App, podemos ver nuestro Carobjeto entra en ser.

Consideremos que Car depende de las clases TireEngine¿Cómo podemos hacer esto?

Así que aquí enlazamos el Caral App Contenedor y dado que especificamos sus dependencias pasándole un TireEngine, obtendremos un nuevo objeto brillante con todas las dependencias necesarias que se han pasado.

Ok, cambiemos un poco:

Observe que nuestra unión se ha ido. No solo desapareció el enlace, sino que también desaparecieron las dependencias que habíamos creado y pasado manualmente. ¿Que pasa ahora? Sí mi hombre, todavía obtienes el objeto que necesitas, ¡dependencias incluidas! ¡¿Que?!

Con toda su bondad, Laravel tomará las siguientes acciones por ti:

  • ¿El usuario creó específicamente un enlace para el automóvil? (úsalo si es así)
  • ¿Qué pasa si el programador no especificó uno? Luego, reflexione en Car para determinar las dependencias.
  • Resuelva las dependencias que necesite el automóvil (llanta y motor).
  • Cree la nueva instancia para usted, incluidas las dependencias, ¡sin cargo!

Guau. Ojalá hubiera pensado en eso. 🙂 Si tuviera un glifo para dejar boquiabierto, lo agregaría. A la luz de esto iremos por un gran pulgar hacia arriba ¡Gracias a Taylor Otwell y su equipo de superestrellas como Dayle Rees, Shawn McCool, Jeffrey Way, Jason Lewis, Ben Corlett, Franz Liedke, Dries Vints, Mior Muhammad Zaki y Phil Sturgeon por hacer todas estas cosas geniales!

Dependencias de dependencias

Así que llevemos este concepto un poco más lejos. Sabemos que Car tiene dependencias de a Tirey an Engine¿Qué pasa si el TireEngine tiene sus propias dependencias? Digamos que nuestro Tire tiene una Bridgestone dependencia y el Engine tiene una Turbo dependencia. Todavía queremos hacer un Car, ¿nuestro IoC se encargará de todo esto por nosotros?

¡Veamos!

¡Santo macarrones! ¡Doble pulgar hacia arriba! El Contenedor pudo hacer algo de magia real para resolver lo que fuera Carnecesario.

En pocas palabras, para esto es el contenedor de IoC: facilita mucho la tarea de configurar la inyección de dependencia. Comprender el contenedor de IoC será muy útil una vez que comencemos a usar el patrón de repositorio de Laravel para facilitar un código más legible y fácil de mantener.

Publicar un comentario

0 Comentarios