{"id":1095,"date":"2023-07-14T00:00:00","date_gmt":"2023-07-13T22:00:00","guid":{"rendered":"https:\/\/programaraciegas.net\/?p=1095"},"modified":"2023-06-04T06:43:15","modified_gmt":"2023-06-04T04:43:15","slug":"regla-soc-eparation-of-concerns","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=1095","title":{"rendered":"Regla SOC &#8211; Separation of concerns"},"content":{"rendered":"<p>Dentro de las <a href=\"https:\/\/programaraciegas.net\/?p=1089\">reglas para escribir software simple y robusto<\/a> tenemos la regla de SOC cuyo acr\u00f3nimo significa <strong>Separation of concerns<\/strong>. Esto se traduce como <em>separaci\u00f3n de intereses<\/em>. Este t\u00e9rmino de ingenier\u00eda fue creado por <a href=\"https:\/\/es.wikipedia.org\/wiki\/Edsger_Dijkstra\">Edsger Dijkstra<\/a> en un art\u00edculo para indicar la necesidad de centrar la atenci\u00f3n en aspectos espec\u00edficos dentro de las distintas estructuras de manipulaci\u00f3n de la informaci\u00f3n dentro del software. Esta separaci\u00f3n de intereses dentro del software se puede aplicar a nivel de arquitectura del proyecto y a nivel de codificaci\u00f3n de los m\u00e9todos y funciones.<\/p>\n<h2>Arquitectura de intereses<\/h2>\n<p>A nivel de arquitectura debemos agrupar los distintos intereses dentro de m\u00f3dulos o microservicios. Cada m\u00f3dulo o servicio deber\u00e1 encargarse de un aspecto del proyecto.<\/p>\n<p>Se busca que cada m\u00f3dulo o microservicio sea independiente y tengan claras sus responsabilidades.<\/p>\n<p>Dentro de la modularizaci\u00f3n del c\u00f3digo se aplican patrones de dise\u00f1o como MVC (Modelo vista controlador), MVP (Modelo vista presentador) y patrones de dise\u00f1o similares. Esta forma de organizar el c\u00f3digo nos permite diferenciar cl\u00e1ramente las clases relacionadas con el modelo de datos, la interfaz de usuario y la forma de presentar y manipular los datos en la interfaz de usuario.\u00a0<\/p>\n<p>Aplicando estos patrones de dise\u00f1o a la hora de modularizar nuestro c\u00f3digo podremos realizar modificaciones en la interfaz de usuario sin necesidad de afectar al modelo de datos o a la l\u00f3gica de negocio ya que las responsabilidades de cada parte del m\u00f3dulo est\u00e1n conceptualmente definidas.<\/p>\n<h2>Separaci\u00f3n del c\u00f3digo por intereses<\/h2>\n<p>Para separar el c\u00f3digo por intereses se debe realizar un ejercicio de an\u00e1lisis observando desde el punto m\u00e1s alto de abstracci\u00f3n de nuestro proyecto, tanto en funcionalidad como en la informaci\u00f3n que se manipula, hasta delimitar la responsabilidad y relaci\u00f3n entre las distintas clases y m\u00f3dulos del proyecto.<\/p>\n<p>Con este esfuerzo se busca obtener las siguientes ventajas: eliminar la posible duplicaci\u00f3n en la l\u00f3gica de negocio, ampliar la capacidad de mantenimiento del proyecto, incremento de la cohesi\u00f3n entre clases y reducci\u00f3n del acoplamiento entre clases y m\u00f3dulos.<\/p>\n<p>Una vez realizado este an\u00e1lisis se aplican distintos paradigmas de programaci\u00f3n como la programaci\u00f3n orientada a aspectos, arquitectura hexagonal, inyecci\u00f3n de dependencias y la separaci\u00f3n de m\u00e9todos por responsabilidad.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dentro de las reglas para escribir software simple y robusto tenemos la regla de SOC cuyo acr\u00f3nimo significa Separation of concerns. Esto se traduce como separaci\u00f3n de intereses. Este t\u00e9rmino de ingenier\u00eda fue creado por Edsger Dijkstra en un art\u00edculo para indicar la necesidad de centrar la atenci\u00f3n en aspectos espec\u00edficos dentro de las distintas &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=1095\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abRegla SOC &#8211; Separation of concerns\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6],"tags":[354,388],"class_list":["post-1095","post","type-post","status-publish","format-standard","hentry","category-metodologiafilosofia","category-programacion","tag-software","tag-teoria"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/1095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1095"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/1095\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}