De las DLLs del infierno al infierno de las XML

Leo en On Software and Languages un interesante artículo en el que habla de lo “complejos” y difíciles de leer que se hacen actualmente los proyectos basadaos en Java, gracias a los archivos de compilación y configuración en XML usados por herramientas como Scripts Ant, Struts2, Spring, log4j, Hibernate, etc.

Para ilustrar este problema, el autor empieza comparando un Script de Ant en XML con un Ant-builder en Groovy:

Ant XML

<project name="prepareBookDirs" default="copy">
  <property name="target.dir" value="target"/>
  <property name="chapters.dir" value="chapters"/>
  <target name="copy">
    <delete dir="${target.dir}" />
    <copy todir="${target.dir}">
      <fileset dir="${chapters.dir}"
        includes="*.doc"
        excludes="~*" />
    </copy>
  </target>
</project>

Ant-builder en Groovy

  TARGET_DIR = 'target'
  CHAPTERS_DIR = 'chapters'
  ant = new AntBuilder()
  ant.delete(dir:TARGET_DIR)
  ant.copy(todir:TARGET_DIR){
      fileset(dir:CHAPTERS_DIR, includes:'*.doc', excludes:'~*)
  }

Como pueden ver, es notablemente más legible el segundo código, no sólo porque es más corto y con menos caracteres superfluos, sino porque se usa el mismo lenguaje para escribirlo, en vez de XML. Como bien dice el autor de la entrada original, el creador de Ant admitió que usar XML es “…probablemente un error”.

Luego, el autor del artículo muestra una tabla donde compara números de código realizado en Java contra Ruby on Rails. Prestar especial atención a las líneas de configuración y al tiempo que lleva realizar el proyecto.

     Metric               Java +              Ruby +
                     Spring/Hibernate         Rails 

  Time to market     4 months, approx.      4 nights,
                      20 hours/week       5 hours/night
  Lines of code          3,293                1,164
  Lines of config        1,161                113
  Number of classes/     62/549               55/126
  methods

Los archivos de configuración en Ruby ocupan el ¡10%! de líneas de lo que ocupan en Java, y el tiempo de desarrollo cambia de 4 meses en el lenguaje de los infames XMLs, a ¡4 noches! en el interpretado. Si bien no sé hasta que punto los números son acertados, por más que las líneas de configuración en ruby aumenten un 200%, aún serían muchísimas menos que las de Java.

En el artículo original, el autor señala la complejidad de frameworks como spring, que llevan a necesitar utilizar gráficas para poder entender la estructura interna de sus archivos de configuración XML. También cuenta lo siguiente, que me pareció ya excesivo, pero que a muchos compañeros de trabajo que conozco les encantaría:

But wait, it comes even better: some people are so enamoured with XML that they are using it as a programming languag, either doing patterns with Spring and XML configuration files, or even inventing an XML-based programming language and writing its interpterer in XSLT (I’m not joking!).

Lo que en español viene a ser algo parecido a esto:

Pero esperen, se pone mucho mejor: algunas personas están tan enamoradas de XML, que lo están utilizandon como un lenguaje de programación, ya sea haciendo patrones con Spring y archivos de configuración XML, o incluso inventando un lenguaje de programación basado en XML y escribiendo su intérprete en XSLT (No es broma!).

Sin comentarios. Creo que con el ejemplo ya sobra, hay gente para todo.

Conclusión

En la entrada original, el autor hace un análisis final que no me pareció necesario incluir en este post (lo van a tener que leer en inglés). Por mi parte, la conclusión es sencilla, XML es un recurso excelente, cuando es usado con moderación y no para cada problema que se cruza en nuestro camino. Prefiero usar archivos de configuración más pequeños, preferiblemente escritos en el mismo lenguaje en que estoy desarrollando (como es el caso de Python o PHP), o llegado el caso, algo más legible como JSON o YAML.

Y para terminar, coincido totalmente con la reflexión del autor de la entrada original:

I think that the loose coupling thing is overrated…

Tags: , , , ,

This entry was posted on Tuesday, September 22nd, 2009 at 10:45 am and is filed under Programación. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply