Es común que muchas veces se confundan los términos o bien se piense que son lo mismo. Ni uno ni otro, tienen mucho que ver y desde mi punto de vista en un buen diseño de software estos conceptos van de la mano.
Para reutilizar el conocimiento sito a Wikipedia que los desarrolla y luego viene una explicación intentando ser mas coloquial.
Inversión de control
Inyección de dependencias
Nos focalizamos en Inyección de dependencias y para un post siguiente (y no muy lejano) dejamos la Inversión de Control.
La inyección de dependencias, también elimina el acoplamiento y en frameworks como Spring, facilitan el uso y aplicación de este concepto. Basicamente lo que hacemos es tener un controlador quien será el encargado de "inyectar una dependencia", que quiero decir? Por ejemplo (y tomando el caso de Wikipedia) Supongamos que tenemos un vehículo y un motor implementados de la siguiente manera, sin nuestra Inyección.
El objetivo sería no instanciar la clase motor dentro de la clase vehículo sino, colocar un tercer objeto (llamemos fábrica) quien será el encargado de inyectar (a través de un Setter) el objeto motor dentro del vehículo. Veamos el siguiente ejemplo con Inyección.
Que logramos con esto? mayor desacoplamiento entre clases.
Y por qué? porque le quitamos la responsabilidad al vehículo de obtener su motor y el objeto fábrica es quien se encarga de proveerle un motor a traves de un método Setter.
Esto trae a la charla un claro ejemplo cómo es el caso de las autopartistas, hace un tiempo atrás (tal vez todavía se siga con la misma práctica) muchas camionetas 4x4 de diferentes marcas tenían el mismo motor provisto por otra autopartista de otra marca. Y por que esta metodología? precisamente porque libera de crear un motor delegando la responsabilidad a alguien que se especializa en esta materia.
En resumen, algunas de las cosas que logramos con estos patrones es el desacoplamiento, sencillez y facilidad de mantenimiento en nuestro código y la delegación de responsabilidad en forma segura y ordenada.
Seguramente, con vuestra experiencia, deben tener algunos conceptos más y los invito a comentar. No olvidemos uno de los objetivos de este BLOG el "Conocimiento compartido" pilar del aprendizaje en equipo.
No hay comentarios:
Publicar un comentario