Cuidado con las responsabilidades que das a Hibernate

En el capítulo 5 del libro Code Complete se discute sobre el tema de la ocultación de información. El autor sugiere que nos preguntemos «¿Qué necesita ocultar esta clase?» antes que pensar sólo en orientación a objetos.

Pone como ejemplo los identificadores de instancias y el hecho de que a menudo se elige como tipo del identificador int. De esta manera no se oculta la generación de nuevos identificadores así que sugiere que se envuelva el identificador en una clase.

Esto me ha recordado que yo caí en ese error en un proyecto con Hibernate. Al comienzo del desarrollo usaba fakes con identificadores asignados manualmente para probar el sistema. En el momento en que integré Hibernate dejé que fuese el ORM el que asignase los identificadores. Y ahí empezaron los problemas:

Cuando establecía manualmente un identificador el primero era el 0. En cambio, para Hibernate era el 1. Parece que no es tan grave, pero cargó de complejidad el proyecto porque desde ese momento era necesario pararse a pensar qué identificador tenía cada dispositivo, cambiarlo para hacer pruebas y más aún: Pensar cómo gestionar las pruebas sin Hibernate y con Hibernate. La complejidad en cuanto a gestión de configuración es mucho más alta que la que hubiese supuesto implementar un generador de identificadores.

La cosa es que el identificador de un objeto parece un valor muy insignificante como para preocuparse por él. Pero la experiencia me ha enseñado que asignar un identificador es demasiada responsabilidad como para otorgársela a un módulo de la capa de persistencia.

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