Características experimentales + Jackson + BDD relacional

Durante el desarrollo de una aplicación surgen ideas que se pueden probar como características experimentales. Tras un tiempo, estas características pueden formalizarse o morir, como si nada hubiera pasado.

Desarrollando mi proyecto fin de carrera, pensé que sería interesante recoger el número de visitas que recibe un servicio aunque no sea comprado. Es una característica experimental porque no sé hasta que punto es útil esa información. En el futuro, se analizarán esos datos y se determinará si es útil recoger el número de visitas o no.
La base de datos para persistir los objetos del dominio es relacional. haciendo que provoque demasiada fricción el añadir características experimentales (alterar la estructura de las tablas). Por ello, he añadido en la tabla Servicios un campo de texto largo misc. De hecho, hace tiempo leí un blog que era muy útil añadir a todas las tablas campos log (para anotar la fecha de cualquier modificación en el registro) y misc para añadir información extra.
En el campo misc de la base de datos almacenaré un JSON con los valores experimentales que incluya en el modelo y para facilitarme la vida manejando el JSON, convierto de JSON a Map y viceversa para obtener y añadir claves. Los métodos para obtener el mapa y crear el JSON a partir del mapa los he agrupado en una clase JsonMap que utiliza la librería jackson-mapper-asl.
En el modelo Servicio he incluido la propiedad misc con la anotación @Column de JPA y he añadido dos métodos privados para obtener el mapa del JSON contenido en misc y actualizar misc con un par “clave”:”valor”.
Como veis, utilizar la nueva característica experimental se reduce a llamar a los métodos getVisitas(), incrementarVisitas() y la constante CLAVE_VISITAS (para no equivocarse con la clave del valor).
Sería una solución más elegante interceptar cuando se carga el objeto y se persiste mediante AOP y mantener un mapa en memoria en vez de serializar y deserializar el JSON con cada modificación de la propiedad.
Por cierto, los Gists los he creado directamente desde Spring Tool Suite 😉
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s