{"id":164,"date":"2009-04-06T19:12:14","date_gmt":"2009-04-06T17:12:14","guid":{"rendered":"https:\/\/blogs.ua.es\/especialistajava\/?p=164"},"modified":"2009-04-07T11:18:03","modified_gmt":"2009-04-07T09:18:03","slug":"un-enfoque-pragmatico-i","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/especialistajava\/2009\/04\/06\/un-enfoque-pragmatico-i\/","title":{"rendered":"Un Enfoque Pragm\u00e1tico (I)"},"content":{"rendered":"<p>Buenas, ya estamos de vuelta. \u00a1 Han pasado las Navidades, y casi la Pascua !<\/p>\n<p>Para que no se haga eterno y pueda publicarse antes de que cambiemos de milenio, he dividido este articulo en dos. Aqu\u00ed va la primera parte.<\/p>\n<p>En el primer apartado, <strong>La Maldad del Duplicado<\/strong>, se nos recomienda que no debemos duplicar el conocimiento a lo largo de nuestro sistema, y adem\u00e1s, no dividir una pieza de conocimiento entre m\u00faltiples componentes del sistema. Es decir, que cada pieza de conocimiento tenga una representaci\u00f3n \u00fanica, fiable y sin ambig\u00fcedades.<\/p>\n<h3>Tip 11: DRY &#8211; No te repitas (<em>Don&#8217;t Repeat Yourself<\/em>)<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" style=\"border: 0pt none\" src=\"http:\/\/img.printfection.com\/1\/2683\/1732811\/I15YW.jpg\" alt=\"DRY\" width=\"228\" height=\"228\" \/><\/p>\n<p>\u00bfAlgo da m\u00e1s rabia para un desarrollador que hacer lo mismo dos veces? Pues aunque parezca que no, al final siempre nos acaba sucediendo. Es m\u00e1s, al tener partes de la aplicaci\u00f3n duplicada (reglas de negocio, m\u00e9todos, men\u00fas, etc&#8230;), con cada cambio, nos toca retocar cada parte por duplicado\/triplicado\/&#8230;<\/p>\n<p>\u00bfY por qu\u00e9 aparecen los duplicados? porque (1) no podemos evitarlos, o (2) no nos damos cuenta, (3) por pereza o al compartir c\u00f3digo, (4) por duplicaci\u00f3n del mismo trabajo por diferentes desarrolladores.<\/p>\n<p>\u00bfY como evitar la duplicaci\u00f3n? \u00bfEs posible? En el primer caso, cuando no podemos evitarla, por temas de diferente representaci\u00f3n de la informaci\u00f3n, los generadores de c\u00f3digo pueden ayudarnos. Cuando documentamos el c\u00f3digo, estamos duplicando. Y los comentarios,en ocasiones son imprescindibles. \u00bfSoluci\u00f3n? Simplifica el c\u00f3digo. \u00bfY si el c\u00f3digo se basa en un documento de especificaci\u00f3n? \u00bfY qu\u00e9 pasa con los lenguajes de programaci\u00f3n que nos hacen repetir mucho c\u00f3digo (no hay que ir m\u00e1s lejos que la separaci\u00f3n interfaz\/implementaci\u00f3n)? Aqu\u00ed la refactorizaci\u00f3n y los IDEs juegan un papel muy importante. Cuando los duplicados aparecen por nuestra negligencia (suena mejor descuido), solo nos queda aprender de los errores. Respecto a la pereza (o las prisas), os dejo dos refranes. <em>No dejes para ma\u00f1ana lo que puedes hacer hoy<\/em> y <em>V\u00edsteme despacio que tengo prisa<\/em>. \ud83d\ude42 Y finalmente, para la debida al trabajo en equipo, lo mejor es la comunicaci\u00f3n, abierta, activa, bidireccional y entre todos los miembros del equipo.<\/p>\n<h3>Tip 12: Facilita la Reutilizaci\u00f3n (<em>Make It Easy to Reuse<\/em>)<\/h3>\n<p>Para evitar duplicados, si nuestro c\u00f3digo es reusable y est\u00e1 localizable en un lugar adecuado, nuestro equipo no va a reimplementar algo que ya est\u00e1 hecho. Si el c\u00f3digo no es reusable, o su uso no es facil\/amigable, nadie lo usar\u00e1, e inevitablemente, aparecer\u00e1n duplicados \ud83d\ude41<\/p>\n<p>En el segundo apartado, titulado <strong>Ortogonalidad<\/strong>, se trata la <em>cohesi\u00f3n <\/em>y el <em>acoplamiento <\/em>(2 de los conceptos m\u00e1s importantes dentro de la ingenieria del software). 2 lineas son ortogonales si forman un angulo recto. 2 vectores son ortogonales si son independientes. 2 componentes son ortogonales si al modificar uno, el otro no se ve afectado. La base de datos es ortogonal del interfaz de usuario, si al modificar la base de datos, no tenemos que modificar ninguna pantalla\u00a0<em> \u00bfesto es posible?<\/em><\/p>\n<h3>Tip 13: Elimina los Efectos entre las Cosas que No Est\u00e1n Relacionadas (<em>Eliminate Effect Between Unrelated Things<\/em>)<\/h3>\n<p>Al dise\u00f1ar componentes cohesionados y con bajo acoplamiento, un cambio en un componentes evita tener que cambiar otros. Con esto, ganaremos productividad, ya que aquello que es modificable est\u00e1 localizado, y por tanto, los cambios se hacen estimable, las pruebas viables, y adem\u00e1s, se reduce el riesgo.<\/p>\n<p>Respecto a como eliminar los efectos, con una buena organizaci\u00f3n del equipo de desarrollo, un dise\u00f1o basado en capas, con un buen uso (y no abuso) de los patrones de dise\u00f1o, con ayuda de la AOP, etc&#8230;<\/p>\n<p>El tercer apartado, <strong>Reversible<\/strong>, trata sobre la inestabilidad de las decisiones. Lo que hoy es blanco, ma\u00f1ana es negro y la semana siguiente es gris. El problema viene cuando estas decisiones son cr\u00edticas, como elegir un proveedor de base de dastos o un patr\u00f3n arquitect\u00f3nico, ya que el coste de deshacer esta decisi\u00f3n suele rechazar de antemano la posibilidad del cambio.<\/p>\n<p>Dentro del marco de las metodolog\u00edas \u00e1giles, donde se abrazan los cambios y el dise\u00f1o se minimiza para favorecer la producci\u00f3n temprana de c\u00f3digo, el cual va mejorando d\u00eda a d\u00eda mediante refactorizaciones, nuestra aplicaci\u00f3n va a cambiar siempre. Lo que hoy nos vale como soluci\u00f3n, puede que dentro de un mes no. Hoy hacemos un prototipo, y la semana que viene lo tiramos a la basura.<\/p>\n<h3>Tip 14: No Hay Decisiones Finales (<em>There Are No Final Decisions<\/em>)<\/h3>\n<p>Por esto, necesitamos que nuestra arquitectura sea flexible, que vea los cambios como algo bueno (al fin y al cabo, una petici\u00f3n de cambio por parte del cliente supone m\u00e1s trabajo, y m\u00e1s trabajo debe suponer m\u00e1s ingresos). \u00bfComo conseguimos una arquitectura flexible? Una arquitectura en capas (l\u00f3gicas, m\u00e1s que f\u00edsicas) es imprescindible, as\u00ed como un buen uso (y no abuso &#8211; me repito) de los patrones de dise\u00f1o.<\/p>\n<p>Bueno, hasta aqu\u00ed medio cap\u00edtulo m\u00e1s &#8230; espero que os haya gustado. La segunda mitad, si no pasa nada raro, estar\u00e1 para despu\u00e9s de vacaciones. A disfrutar del merecido descanso, y que la fuerza os acompa\u00f1e \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Buenas, ya estamos de vuelta. \u00a1 Han pasado las Navidades, y casi la Pascua ! Para que no se haga eterno y pueda publicarse antes de que cambiemos de milenio, he dividido este articulo en dos. Aqu\u00ed va la primera &hellip; <a href=\"https:\/\/blogs.ua.es\/especialistajava\/2009\/04\/06\/un-enfoque-pragmatico-i\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":903,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[3954],"class_list":["post-164","post","type-post","status-publish","format-standard","hentry","category-articulos","tag-pragmatic"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/posts\/164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/users\/903"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/comments?post=164"}],"version-history":[{"count":26,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/posts\/164\/revisions"}],"predecessor-version":[{"id":192,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/posts\/164\/revisions\/192"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/media?parent=164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/categories?post=164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/especialistajava\/wp-json\/wp\/v2\/tags?post=164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}