26

Aprende Inyección de Dependencias: El camino de las buenas prácticas (Primera parte)

77426Puntos

hace 7 meses

Curso de Programación Orientada a Objetos: POO
Curso de Programación Orientada a Objetos: POO

Curso de Programación Orientada a Objetos: POO

La misión: lograr que la virtualidad sea idéntica a la realidad. El elegido para esta tarea: tú. Sé parte de la generación que logra cambiar el mundo a través de ideas innovadoras, porque la diferencia entre ser testigo del cambio y ser parte de él comienza con Platzi.

La Inyección de Dependencias es un patrón de diseño que nos ayuda seguir los 5 principios SOLID de la Programación Orientada a Objetos para reutilizar nuestro código de la forma más limpia y escalable posible.

Para estudiar cómo y para qué funciona la Inyección de Dependencias, primero debemos estudiar los 5 principios SOLID. Y antes de eso debemos repasar un poco los 4 pilares de la programación orientada a objetos. ¡Y antes de eso debemos recordar las supuestas ventajas y el verdadero objetivo de la POO!

Haremos esto: en este artículo recordaremos todos estos conceptos para, finalmente, en la segunda parte de este artículo, entrar de lleno con la implementación en código de la inyección de dependencias.

Empecemos desde el principio.

Dinosaurio

Paradigmas de Programación: Programación Orientada a Objetos

Los Paradigmas de Programación son teoría con la que obtenemos un modelo para resolver diferentes problemas.

Existen diferentes paradigmas como la Programación Orientada a Objetos (POO), Programación Funcional o Programación Estructurada. Cada uno tiene una forma diferente de encontrar soluciones, incluso resolviendo problemas de otros paradigmas anteriores.

La Programación Orientada a Objetos nos “orienta” a identificar y analizar cada elemento de nuestros sistemas como objetos individuales que tienen atributos y comportamientos. Además, es posible que diferentes objetos compartan algunas propiedades o características, lo que significa que reutilizar código y evitar repetidos será muy importante para que nuestro código sea escalable y fácil de mantener.

Los 4 pilares de la POO son:

  • Abstracción: vamos a analizar todos nuestros objetos para abstraer su composición y generar diferentes clases/moldes/modelos que nos permitan crear todos los objetos de nuestro sistema.
  • Encapsulamiento: debemos definir/limitar el nivel de acceso que tienen las propiedades y métodos de nuestros objetos, ya que no todas las partes de nuestro programa deben poder leer y/o modificar atributos especiales en nuestras clases.
  • Herencia: consiste en crear clases (subclases) a partir de otras clases (superclases) que implementan diferentes comportamientos que podemos reutilizar en diferentes objetos del sistema y evitar código repetido.
  • Polimorfismo: consiste en sobrescribir algunos métodos de la clase de la cual heredan nuestras subclases para asignar comportamientos diferentes y funcionar correctamente a pesar de recibir argumentos diferentes (más flexibles) que los que definimos en sus clases padre.

Recuerda que todo esto lo estudiamos a profundidad en el Curso de Programación Orientada a Objetos: POO.

SOLID

Montaña

Más que reglas que debemos seguir estrictamente, los 5 principios SOLID son una guía de buenas prácticas que nos ayudarán a construir código mucho más legible, mantenible y escalable.

El verdadero valor de SOLID está en entender los patrones y herramientas que nos proporciona para casos muy generales. Estos principios serán muy útiles, lo prometo. Entre más los estudiemos y practiquemos, mejor entenderemos cuánto y cuándo vale la pena seguirlos para resolver problemas sin crear otros 50.

Los 5 principios son:

  • Single Responsibility: cada una de nuestras clases debe tener una única responsabilidad (easy peasy), ya que podremos reutilizar su código cuando necesitemos implementar la misma funcionalidad en algún otro lugar.
  • Open-Close: nuestras clases deben estar abiertas a extensión, pero cerradas a su modificación (wat). Por ejemplo: el código de nuestras clases para usuarios genéricos no debe tocarse si queremos añadir una nueva funcionalidad a algún usuario especial. En vez de modificar la clase usuario para soportar las nuevas características podemos crear una nueva clase (SuperUser) que herede de User y añada sus nuevas características.
  • Liskov Substitution: al trabajar con herencia debemos asegurarnos de que las subclases (las clases que heredan o extienden de otras clases) sigan implementando los métodos que la superclase definió. Si User tiene el método walk, SuperUser también debe tenerlo, así su comportamiento cambie un poco.
  • Interface Segregation: NO debemos forzar nuestras clases a implementar atributos o comportamientos que no necesitan.
  • Dependency Inversion: vamos a desacoplar nuestras clases, no deben tener dependencias/referencias a otras clases de forma muy estricta. Hablaremos a detalle sobre estos últimos 2 principios un poco más adelante, ya que son cruciales en la inyección de dependencias.

Puedes profundizar muchísimo más sobre estos 5 principios en las siguientes clases y lecturas:

Patrones de Diseño

Los Patrones de Diseño nos ayudan a resolver problemas generales que nos encontramos al tratar de seguir las reglas que implementan los lenguajes que siguen algún paradigma de programación.

Podemos entender los patrones de diseño como “paradigmas de programación” que nos ayudan a cumplir con los “verdaderos paradigmas de programación” de la mejor forma posible, incluso cuando parece que se nos está complicando un poco seguirlos.

Por ejemplo: la programación orientada a objetos nos pide seguir las reglas del encapsulamiento y la abstracción al mismo tiempo, existen patrones de diseño que nos ayudan a cumplir con estas reglas, seguir las buenas prácticas de este paradigma y encontrar las mejores soluciones a los problemas que nos encontramos al programar.

Conclusiones

¿Recuerdas que la Inyección de Dependencias es un patrón de diseño que nos ayuda a seguir las buenas prácticas de SOLID?

Bueno, entendiendo todos estos conceptos podemos entrar de lleno a estudiar la inyección de dependencias para salvarnos de muchos dolores de cabeza por tratar de seguir las buenas prácticas.

Una vez la entiendas, la Inyección de Dependencias será tu super poder. Y de eso nos encargaremos en la siguiente parte de este artículo.

Mientras tanto, aprende a elegir el paradigma correcto para tu próximo proyecto con los siguientes cursos:

La próxima vez te contaré cómo continuar tu ruta de aprendizaje con muchos otros cursos. 😉

¡#NuncaParesDeAprender! 🤓💚

Curso de Programación Orientada a Objetos: POO
Curso de Programación Orientada a Objetos: POO

Curso de Programación Orientada a Objetos: POO

La misión: lograr que la virtualidad sea idéntica a la realidad. El elegido para esta tarea: tú. Sé parte de la generación que logra cambiar el mundo a través de ideas innovadoras, porque la diferencia entre ser testigo del cambio y ser parte de él comienza con Platzi.
Juan David
Juan David
@juandc

77426Puntos

hace 7 meses

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
4
8712Puntos

Este tema desde hace tiempo me ha parecido interesantísimo, hay un vídeo (un poco viejo pero que ayuda) que me mostraron en la Universidad que me ayudó mucho en entender todo este tópico, se los comparto y espero y les sirva. 👍

https://www.youtube.com/watch?v=_OGGsf1ZXMs

2
77426Puntos
7 meses

Uff… ¡Genial!
Gracias por las referencias, en la segunda parte también hay más… 😉 👌🙌

3
2991Puntos

muchas gracias por la referencia

2

Muy buena información. Interesante tema. Cuando ves el video, te emocionas (todo lo que puedes crear, y desarrollar). Realizas una “reflexión”, y te percatas que, te falta estudiar más.