[BASE] Introducción
Este es el primer post de una serie que, espero, sea larga. Lo espero porque el tema da para mucho y si no es larga significa que habré colgado la toalla antes de acabar. Hoy de momento sólo la introducción.
Durante muchos años me he dedicado al desarrollo de aplicaciones web sobre Java. Cuando hice mi primera aplicación Java no existían ni los JSP, sólo Servlets, lo cual era bastante duro. Por suerte enseguida llegaron los JSPs para ayudar a poner orden. Los años fueron pasando, aparecieron multitud de frameworks que prometían las mil maravillas para el desarrollador, pero nunca me acabaron de convencer. Mientras tanto yo seguía con mis sencillos Servlets + JSP aplicando el patrón MVC. Y claro, uno va escribiendo algunas clases auxiliares para tareas repetitivas. Esas clases se convierten en más y más clases, interconectadas, ampliadas… mezcladas con componentes JSP y, sobre todo, con componentes JavaScript, Ajax…
Tras muchos años al final le puse nombre al invento, sólo para saber de qué hablaba, y le llamé Base ya que lo trataba como un seedwork de base, y no un framework más. Siguiendo el enlace se entra en más detalle de la diferencia entre un seedwork y un framework pero básicamente un seedwork es el conjunto de componentes más o menos generales que muchas veces copiamos para no iniciar un proyecto nuevo totalmente desde cero. Pero luego no hay un concepto de versión del seedwork, ni se mantiene actualizado o enlazado como una librería. Bueno, si se hace sería de manera totalmente manual.
El objetivo de esta serie de artículos es ir mostrando todos estos componentes mientras los voy revisando, documentando y publicando bajo la licencia GPL. El código lo publicaré y actualizaré bajo un repositorio en GitHub, aunque soy novato tanto usando Git como GitHub así que cualquier ayuda es bienvenida.
Dudo que en el momento tecnológico en el que nos encontremos alguien decida iniciar un proyecto nuevo utilizando tecnologías que ya son muy antiguas. Creo que actualmente existen alternativas ya suficientemente maduras en el entorno Java para desarrollar aplicaciones web y olvidarse prácticamente del todo de los Servlets y los JSP (ver JavaEE 6 en general). En todo caso este código puedo servir como ejemplo desde un punto de vista académico o quizás sí pueda utilizarse en entornos en los que hay restricciones de versiones, librerías, etcétera.
Respecto al código que voy a publicar querría hacer dos comentarios y pedir opinión de aquellos que sigáis la serie.
Primera una reflexión sobre el estilo del código. Todo el mundo tiene un estilo para el código: unos saltos de linea por aquí, una indentación especial, unos márgenes… Yo tengo mi estilo, muy personal. Busco la máxima compacidad. Inicialmente me había planteado publicar el código adaptándolo al estilo estándar y oficial de Java. Pero después de una sola clase modificada ¡ya me duelen los ojos! Así que teniendo que cuenta que dudo mucho que alguien vaya a utilizar esto, y que… ¡qué demonios!, es mi código y lo publico como quiero, publicaré el código con mi estilo particular. Las principales diferencias respecto el estándar son las siguiente:
- La indentación es con espacios únicamente, no con tabulaciones ni combinaciones de ambas. Cada nivel de indentación es de 2 espacios, no de 4 como marca el estándar. Cuatro me parece una pérdida de espacio!
- No utilizo llaves { } en bloques de una sola sentencia. Además, si se puede, pongo esa sentencia en la misma linea que el bloque de control en el caso de los if, pero no de los for _o _while.
- Utilización de un margen de 100 caracteres. De hecho habitualmente utilizo margenes mayores, pero me ha parecido que 100 es un buen valor, muy conservador. El estándar marca 80 caracteres, y entiendo que muchas veces va bien, pero la mayor parte del tiempo que se trabajo con el código se hace en un entorno gráfico y yo, personalmente, con el editor maximizado. Con las pantallas y resoluciones de hoy en día, especialmente con los formatos panorámicos, 80 caracteres me parece desperdiciar bastante pantalla y área de trabajo. Como nota curiosa, yo utilizo 150 caracteres normalmente. Trabajo a 2560 píxels de ancho de escritorio.La segunda reflexión es sobre el código de ejemplo. O la ausencia del mismo, más bien. No tengo previsto incluir ningún código de ejemplo concreto. Quizás adapte algunos juegos de pruebas. Pero no cierro la puerta si veo que hay demanda e interés, se aceptan de buen grado sugerencias al respecto.