{"id":20,"date":"2025-09-26T17:46:46","date_gmt":"2025-09-26T17:46:46","guid":{"rendered":"https:\/\/erickibanezdev.com\/blog\/?p=20"},"modified":"2025-09-26T17:46:47","modified_gmt":"2025-09-26T17:46:47","slug":"o-principio-abierto-cerrado","status":"publish","type":"post","link":"https:\/\/erickibanezdev.com\/blog\/o-principio-abierto-cerrado\/","title":{"rendered":"O &#8211; Principio Abierto\/Cerrado"},"content":{"rendered":"\n<p>El principio \u201cOpen\/Closed\u201d o \u201cAbierto\/Cerrado\u201d hace referencia a que todas nuestras entidades de software, deben estar abiertas a la extensi\u00f3n pero cerradas para modificaci\u00f3n. Por entidades nos referimos a clases, m\u00f3dulos, funciones, etc. A continuaci\u00f3n abordaremos un poco m\u00e1s sobre el tema.<\/p>\n\n\n\n<p>En palabras m\u00e1s claras lo que queremos decir es que; deber\u00eda ser posible editar el comportamiento de un m\u00e9todo sin alterar su c\u00f3digo base. Conforme va aumentando la complejidad de nuestro sistema podr\u00e1s darte cuenta que no siempre es sano \u201cmeterle mano\u201d a nuestros m\u00e9todos conforme van surgiendo nuevos requerimientos, de ah\u00ed este principio.<\/p>\n\n\n\n<p>Deber\u00edamos considerar usar la abstracci\u00f3n de manera balanceada ya que podemos estar a\u00f1adiendo complejidad completamente innecesaria en nuestro desarrollo, podemos tratar de predecir en d\u00f3nde podr\u00edamos necesitar estas abstracciones en el futuro y aplicarlas.<\/p>\n\n\n\n<p>Tambi\u00e9n, cada que utilizas \u201cnew\u201d est\u00e1s ligando tu c\u00f3digo a una implementaci\u00f3n. Verifica bien este tipo de instrucciones. Esta bien empezar concreto sin mucha abstracci\u00f3n, sin embargo conforme van aumentando los requerimientos y surge la necesidad de estar realizando cambios; puedes ir modificando estas implementaciones.<\/p>\n\n\n\n<p>Considera implementar nuevas funcionalidades en nuevas clases, y tenlo a\u00fan m\u00e1s en cuenta cu\u00e1ndo trabajas con c\u00f3digo legacy, no te gustar\u00eda romper algo de lo cual no tienes mucha idea al respecto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"259\" src=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/2-ocp.jpg\" alt=\"Imagen de cerradura de alta seguridad\" class=\"wp-image-21\" srcset=\"https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/2-ocp.jpg 387w, https:\/\/erickibanezdev.com\/blog\/wp-content\/uploads\/2025\/09\/2-ocp-300x201.jpg 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\n\n\n\n<p>Pero, como puedo extender mi c\u00f3digo?<\/p>\n\n\n\n<p>Puedes implementar par\u00e1metros en tus m\u00e9todos o funciones las cuales van a definir el comportamiento de estos. Tambi\u00e9n puedes utilizar la herencia de manera que modifiques el comportamiento del tipo que est\u00e1 heredando en lugar del base, o puedes utilizar tambi\u00e9n los extension methods disponibles en C#.<\/p>\n\n\n\n<p>Aplicar este principio nos trae buenas ventajas. Reducimos la probabilidad de a\u00f1adir nuevos bugs en el c\u00f3digo que ya tenemos ya que claramente no lo est\u00e1s modificando cada que a\u00f1aden un nuevo requerimiento, as\u00ed mismo otros elementos que dependen de este c\u00f3digo reducen su probabilidad de romperse debido a cambios en esta dependencia y nos permite llegar a un entendimiento de nuestro software con mayor facilidad.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El principio \u201cOpen\/Closed\u201d o \u201cAbierto\/Cerrado\u201d hace referencia a que todas nuestras entidades de software, deben estar abiertas a la extensi\u00f3n pero cerradas para modificaci\u00f3n. Por entidades nos referimos a clases, m\u00f3dulos, funciones, etc. A continuaci\u00f3n abordaremos un poco m\u00e1s sobre el tema. En palabras m\u00e1s claras lo que queremos decir es que; deber\u00eda ser posible [&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-20","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\/20","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=20"}],"version-history":[{"count":1,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/20\/revisions"}],"predecessor-version":[{"id":22,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/posts\/20\/revisions\/22"}],"wp:attachment":[{"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/media?parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/categories?post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/erickibanezdev.com\/blog\/wp-json\/wp\/v2\/tags?post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}