En nuestra aplicación heredada Java EE, hay muchas clases de objetos de valor (VO) que normalmente contienen solo getters y setters, quizás equals()
y hashCode()
. Estas son (típicamente) las entidades que se guardarán en el almacenamiento de persistencia. (Para el registro, nuestra aplicación no tiene EJB, aunque podría cambiar en el futuro, y usamos Hibernate para persistir en nuestras entidades). Toda la lógica de negocios para manipular los datos en VO está en clases separadas (no EJB, solo POJOs). Mi mentalidad OO odia esto, ya que creo que las operaciones en una clase dada deberían residir en esa misma clase. Así que tengo un impulso para refactorizar para mover la lógica a los VO relacionados.¿Las entidades de Enterprise Java deberían ser tontas?
Acabo de tener una discusión con un compañero de trabajo que tiene mucha más experiencia en Java EE que yo, y confirmó que las entidades tontas al menos solían ser el camino recomendado. Sin embargo, también ha leído recientemente opiniones que cuestionan la validez de esta postura.
entiendo que hay cuestiones que al menos limitar lo que se puede poner dentro de una clase de entidad:
- no debería tener dependencia directa de la capa de datos (por ejemplo, código de consulta se debe más bien a entrar en DAOs separadas)
- si se expone directamente a las capas superiores o para el cliente (por ejemplo, a través de SOAP), puede ser necesario limitar
su interfaz ¿hay razones más válidas no para mover int lógica o mis entidades? O cualquier otra preocupación para tener en cuenta?
¿Las entidades son VO? –
@Pascal Sí - ver mi actualización. –