{"id":575,"date":"2007-03-13T22:26:11","date_gmt":"2007-03-13T21:26:11","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=575"},"modified":"2007-03-13T22:26:11","modified_gmt":"2007-03-13T21:26:11","slug":"xdoclet-programacion-orientada-a-atributos","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=575","title":{"rendered":"XDoclet: programaci\u00f3n orientada a atributos"},"content":{"rendered":"<p>Desde la semana pasada, y a la espera de un importante cambio en mi vida laboral, he empezado a trabajar en un nuevo proyecto de desarrollo. En l\u00edneas generales, es muy parecido al proyecto en el que estaba trabajando hasta hace poco: una herramienta basada en servicio web para una labor administrativa. Est\u00e1 basada en en el <em>framework<\/em> <a href=\"http:\/\/www.springframework.org\/docs\/reference\/mvc.html\">Spring MVC<\/a>, y de hacemos uso de <a href=\"http:\/\/www.javahispano.org\/articles.article.action?id=80\">Hibernate<\/a>, que es una capa de persistencia relacional (hablando en plata, una especie de capa de abstracci\u00f3n para independizar la aplicaci\u00f3n de la base de datos).<\/p>\n<p>Sin embargo, en este proyecto estamos usando una tecnolog\u00eda que no aplicamos en el anterior proyecto, que es <a href=\"http:\/\/xdoclet.sourceforge.net\/\">XDoclet<\/a>. Y bien: \u00bfqu\u00e9 es XDoclet? Pues se trata de una herramienta para dotar a Java de programaci\u00f3n orientada a atributos. \u00bfEin? \u00bfComorl? \u00bfDe qu\u00e9 va eso? Bueno, vamos a explicarlo en plan bestia.<\/p>\n<p>Cuando utilizamos Hibernate junto con Spring tenemos por un lado la definici\u00f3n de nuestras clases java, en una serie de ficheros <em>.java<\/em>, y por otro lado una serie de ficheros <em>.hbm.xml<\/em> que implementan la capa de persistencia relacional. Cada .java est\u00e1 vinculado con un .hbm.xml. Esto, en l\u00edneas generales, est\u00e1 bastante bien, porque reduce el acoplamiento entre capas y blablabla, pero tiene un peque\u00f1o problema: duplica el trabajo de picado de c\u00f3digo. Y no s\u00f3lo eso, sino que cada vez que se cambia una de las clases, es preciso cambiar en consecuencia su hbm, por lo que se desperdicia tiempo que podr\u00edamos estar empleando en otras tareas m\u00e1s preciosas, como picar la l\u00f3gica, realizar pruebas, mirar las musara\u00f1as, jugar al f\u00fatbol o pasar un rato agradable con la novia.<\/p>\n<p>Pues bien, es aqu\u00ed donde entra en juego XDoclet. \u00c9ste nos permite automatizar el proceso de creaci\u00f3n de los ficheros hbm, simplemente a\u00f1adiendo una serie de etiquetas a nuestras clases java. Con esto lo que conseguimos tener tan s\u00f3lo una clase que mantener por componente desarrollado, ya que todas las dem\u00e1s son generadas. Lo cual no est\u00e1 nada mal. Para la generaci\u00f3n entra en juego un colega del que no hab\u00eda hablado hasta el momento: <a href=\"http:\/\/maven.apache.org\/\">Maven<\/a>, herramienta para la gesti\u00f3n de proyectos Java.<\/p>\n<p>Y ya no solamente es esto, sino que adem\u00e1s (en teor\u00eda, de momento nosotros no estamos usando esta caracter\u00edstica) tambi\u00e9n es capaz de generar autom\u00e1ticamente la estructura de la capa de presentaci\u00f3n (en nuestro caso, basada en <a href=\"http:\/\/es.wikipedia.org\/wiki\/Java_Server_Pages\">JSP<\/a> -Java Server Pages- (que, a su vez, generan los archivos HTML, XML y dem\u00e1s que componen el aspecto gr\u00e1fico de la aplicaci\u00f3n en s\u00ed). Una aut\u00e9ntica maravilla.<\/p>\n<p>De momento XDoclet me est\u00e1 gustando mucho: automatiza bastante la creaci\u00f3n de ficheros auxiliares y permite dedicarse a lo que de verdad (dicen) gusta a los programadores: resolver problemas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desde la semana pasada, y a la espera de un<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13,25],"tags":[],"series":[],"class_list":["post-575","post","type-post","status-publish","format-standard","hentry","category-informatica","category-trabajo"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=575"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/575\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=575"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}