{"id":30,"date":"2025-09-26T17:57:18","date_gmt":"2025-09-26T17:57:18","guid":{"rendered":"https:\/\/erickibanezdev.com\/blog\/?p=30"},"modified":"2025-09-26T17:57:18","modified_gmt":"2025-09-26T17:57:18","slug":"d-principio-de-inversion-de-dependencias","status":"publish","type":"post","link":"https:\/\/erickibanezdev.com\/blog\/d-principio-de-inversion-de-dependencias\/","title":{"rendered":"D &#8211; Principio de Inversi\u00f3n de Dependencias"},"content":{"rendered":"\n<p>A continuaci\u00f3n veremos el \u00faltimo y quinto principio correspondiente a la D en SOLID, que nos habla del Principio de Inversi\u00f3n de Dependencias o en ingl\u00e9s&nbsp;<strong>Dependency Inversion Principle<\/strong>. Este principio menciona algunas reglas referentes al uso de abstracciones y separaci\u00f3n de conceptos.<\/p>\n\n\n\n<p>El principio nos dice que, los m\u00f3dulos de alto nivel en nuestro sistema no deber\u00edan depender de aquellos de bajo nivel sin embargo ambos deber\u00edan de depender de las abstracciones y estas \u00faltimas no deben depender de los detalles.<\/p>\n\n\n\n<p>Suena bien pero, \u00bfQu\u00e9 significan exactamente estos conceptos?<\/p>\n\n\n\n<p>Entendemos por c\u00f3digo de alto nivel aquel que contiene reglas de negocio y est\u00e1 m\u00e1s orientado a los procesos de manera que est\u00e1 m\u00e1s lejos de los m\u00f3dulos para la entrada y salida de datos.<\/p>\n\n\n\n<p>Por el contrario el c\u00f3digo de bajo nivel est\u00e1 m\u00e1s cercano a la entrada y salida de datos e interact\u00faa con servicios y\/o hardware o contiene la funcionalidad para conectar con las reglas del negocio y por \u00faltimo las abstracciones son las interfaces o clases abstractas de las que dependen nuestras clases.<\/p>\n\n\n\n<p>Las abstracciones describen el qu\u00e9 es lo que se realiza, como hacer un c\u00e1lculo o enviar un mensaje sin exponer los detalles. Estos detalles son los que describen el como se realiza el mensaje, como se realiza el c\u00e1lculo o de que manera se va a enviar ese mensaje.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"404\" height=\"270\" src=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/5-dip.jpg\" alt=\"Imagen de una mesa con alimentos, tareas laboras y adornos.\" class=\"wp-image-31\" srcset=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/5-dip.jpg 404w, https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/5-dip-300x200.jpg 300w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/figure>\n\n\n\n<p>Entonces resumiendo un poco: Los m\u00f3dulos que contienen las reglas del negocio y los procesos no deben de depender de los m\u00f3dulos m\u00e1s cercanos a la entrada y salida de datos, mientras que ambos deber\u00edan depender de Interfaces o clases base\/abstractas.<\/p>\n\n\n\n<p>Y tambi\u00e9n el realizar determinada acci\u00f3n en una interfaz o clase base, no deber\u00eda de depender del c\u00f3mo se va a realizar ni implementarlo por si mismo.<\/p>\n\n\n\n<p>Ten en cuenta esto cuando crees instancias de clases y dependencias como \u201cnew\u201d ya que de esta manera estar\u00e1s acoplando el c\u00f3digo a esa dependencia. No es que sea malo o prohibido sin embargo es para tener en cuenta y probablemente puedas remediarlo utilizando inyecci\u00f3n por constructor u alg\u00fan patr\u00f3n que facilite esta tarea.<\/p>\n\n\n\n<p>Como se mencion\u00f3 al inicio de estos art\u00edculos, estos principios no es que est\u00e9n tallados en piedra y deban implementarse al 100 en todos y cada uno de los desarrollos. Muchas personas podr\u00e1n tener interpretaciones diferentes o, de acuerdo al software en el que trabajan tendr\u00e1n que adaptar muchas de sus pr\u00e1cticas mismo que puedas hacer t\u00fa mientras analizas \u00e9l c\u00f3digo e implementar solo lo justo y necesario as\u00ed te convenga. Tambi\u00e9n recuerda que implementar demasiada abstracci\u00f3n en un desarrollo en una etapa que probablemente no lo requiera, va a aumentar la complejidad del mismo.<\/p>\n\n\n\n<p>Espero que te haya sido de ayuda a comprender un poco m\u00e1s de estos principios y a seguir aprendiendo!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A continuaci\u00f3n veremos el \u00faltimo y quinto principio correspondiente a la D en SOLID, que nos habla del Principio de Inversi\u00f3n de Dependencias o en ingl\u00e9s&nbsp;Dependency Inversion Principle. Este principio menciona algunas reglas referentes al uso de abstracciones y separaci\u00f3n de conceptos. El principio nos dice que, los m\u00f3dulos de alto nivel en nuestro sistema [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[1,3],"tags":[8,9,7,10],"class_list":["post-30","post","type-post","status-publish","format-standard","hentry","category-blog","category-desarrollo","tag-desarrollo","tag-practicas","tag-software","tag-solid"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/30","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/comments?post=30"}],"version-history":[{"count":1,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/30\/revisions"}],"predecessor-version":[{"id":32,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/30\/revisions\/32"}],"wp:attachment":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/media?parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/categories?post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/tags?post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}