Personal tools
You are here: Home gvSIG Projects gvSIG Desktop Documentation Developers documentation gvSIG devel guide gvSIG 2.0. Developers guide Annexures Desarrollar con gvSIG 1.10+ pensando en gvSIG 2.0
gvSIG Desktop
gvSIG Desktop

Cached time 11/22/13 08:40:45 Clear cache and reload

 
Document Actions

Desarrollar con gvSIG 1.10+ pensando en gvSIG 2.0

by Joaquin Jose del Cerro Murciano last modified 2011-01-31 16:05

Que podemos tener en cuenta de cara a comenzar un desarrollo sobre gvSIG 1.10+ que luego queremos migrar a gvSIG 2

Los cambios entre la versión 1.X y la 2.X llegan a ser muy importantes en 
algunas áreas de la aplicación. Podemos encontrar cambios importantes
relacionados con:

- Construcción del proyecto, se ha pasado de *ant* a *maven*.

- Normalización de nombres de paquetes java.

- Arquitectura de acceso a datos. Se ha reescrito toda la parte
  de `acceso a datos`_ en gvSIG.

- Rearquitectura de la librería de acceso a geometrías.

- Reescritura de los mecanismos usados para la escritura y
  recuperación de los datos en los ficheros de proyecto de gvSIG.
  
- Reescritura de los mecanismos usados para persistir los datos
  de usuario asociados a un *plugin*.

- Cambio del mecanismo de registro usado, pasando de *log4j* a *slf4j*.

- Mecanismo de empaquetado e instalación de *plugins* para gvSIG.

- Introducción de mecanismos para la separación entre API e implementación
  en el código de gvSIG.
  
- Separación de la parte de lógica de la de interface de usuario, esto
  principalmente en las partes de la aplicación que se han reescrito, 
  el interface de usuario, en las partes que no ha sido necesario,
  reescribirlo, se mantienen como estaba.

- Se ha elaborado una `guía de normas de codificación`_ a seguir en el
  código de gvSIG.

A la vista de estos cambios, si nos planteamos la pregunta de *¿ Qué
tenemos que tener en cuenta para iniciar un desarrollo en la línea 1.X
y luego migrar a la línea de la 2 ?*, la respuesta no es simple.

Lo primero que nos surge es que *no se puede mantener
esa compatibilidad*. Si pensamos un poquito más podemos seguir
algunas recomendaciones, unas mas difíciles de seguir que otras. 
Vamos a enumerar algunas de ellas aquí, y que cada cual
decida sobre la posibilidad de aplicarlas en función de su proyecto:

- **Nunca modifiques código fuente de gvSIG**. Aunque pueda parecer
  obvio, no modifiques el código de gvSIG, úsalo. Hay puntos de extension
  en gvSIG que te permiten *pinchar* muchas de las funcionalidades de gvSIG
  para personalizarlas, y si para la que necesitas no lo hay, comentanoslo
  para que estudiemos como darte una solución.

- **Trabaja contra un instalable de gvSIG y no contra las fuentes**. Esto
  realmente sería más que una recomendación. A la hora de desarrollar
  no incrustes tu desarrollo en el *workspace* con los fuentes de gvSIG.
  Crea un *workspace* para tu proyecto que despliegue tus *plugins* sobre
  una instalación de gvSIG.
  
- **Usa maven como mecanismo de construcción**. Existe un repositorio de 
  *maven* para la versión 1.9+ de gvSIG. Si puedes prepara tu proyecto con
  *maven*, siguiendo la estructura multimódulo recomendada para la línea
  de la 2.
  
  No es imprescindible, de hecho, si no estás familiarizado con maven, te
  puede causar más de un dolor de cabeza, pero, en caso de que luego
  quieras migrar a la línea de la 2, será trabajo que llevarás adelantado.
  
- **Mantén separada la implementación del API de las funcionalidades
  que aportes**. Busca un equilibrio entre una implementación monolítica
  y disponer de varias librerías con su API e implementación, de forma que
  las dependencias entre ellas solo estén a través del API de estas.
  
  En caso de querer empezar a hacer esa separación entre API e implementación
  en código para la 1.X, puedes emplear los mecanismos que hay implementados
  en la librería *org.gvsig.tools* de la 2 que funciona también en la línea 
  de la 1.X
  

- **Mantén la parte de acceso a datos dentro de la lógica de tu aplicación**, en la
  parte de la implementación, y dentro de lo posible intenta mantener
  controladas las partes de tu código que acceden a la parte de datos. Cuando pases
  a la versión 2.X tendrás que modificar esas partes de tu aplicación.
  
- **Mantén la parte de acceso a geometrías controlada** en la parte de
  lógica de tu desarrollo. Los cambios en el manejo de geometrías han sido
  importantes en la 2.
  
- **Mantén controlado y documentado qué partes de tu aplicación se graban
  con el proyecto**. Como se guardan los datos en el proyecto
  a cambiado completamente, obligando a declarar qué es lo que se va a
  guardar en el proyecto, con lo que es recomendable que esté bien documentado
  para facilitar el cambio al modelo de proyecto de la 2.

- **Usa como mecanismo de registro el API de slf4j sobre el backend de log4j**.
  Puedes consultar información sobre esto en `Loggin`_

- **Usa el interface clonable**. Cuando tengas que clonar objetos usa este interface
  y sigue las recomendaciones de java para hacerlo. *Nunca uses los mecanismos de
  persistencia del proyecto para clonar un objeto*. Puedes encontrar documentación
  sobre esto en el documento `Clonación de objetos`_.

En general no estaría mal que leyeses los apartados de `Crear un proyecto para gvSIG`_
y `Migración de proyectos a gvSIG 2.0`_ de la guía de desarrollo de gvSIG 2.

.. _`Crear un proyecto para gvSIG` : /web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/crear-un-proyecto-para-gvsig
.. _`Migración de proyectos a gvSIG 2.0` : /web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/howto-migrate-projects-to-gvsig-2-0
.. _`Clonación de objetos` : /web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/howto-migrate-projects-to-gvsig-2-0/object-cloning
.. _`Loggin` : /web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/howto-migrate-projects-to-gvsig-2-0/logging
.. _`acceso a datos` : /web/reference_catalog/lookupObject?uuid=dbe8c0a65f2fd32baa1c48f85df5322d
.. _`guía de normas de codificación` : /web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/coding-development-guidelines/coding-conventions

View source document

View source document Get permanent link


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: