2009-01-29 12 views
6

Tengo un proyecto que está utilizando Spring y se divide en un par de doo DAO y DTO asociados. Estoy usando JdbcTemplate, pero no mucho más, ya que es exactamente el nivel de abstracción con el que estoy contento.Lazy Cargando campos DTO en Spring

Actualmente estoy realizando cargas vagas en mis DTO colocando un código bastante peludo en sus captadores.

lógica texto modelo básico es: 1. Si el campo no es nulo devolver su valor y salida 2. Contacto DAO adecuada a buscar dtos pertinentes 3. almacenarlos hasta la próxima vez.

Funciona bien, excepto que mis DTO humildes están acoplados con un montón de DAO y no son tan POJOey.

Aparece otro olor a código si coloco la lógica en el DAO, ya que manejaría tanto CRUD para sus DTOs y Lazy Loading, y según tengo entendido, los Objects deberían tener una responsabilidad única.

Espero que haya un enfoque Spring relativamente simple que pueda usar para inyectar un objeto Lazy Loader entre los DAO y los DTO para lograr esto, pero cualquier otra solución funcionaría para mí.

¿Alguna idea?

Respuesta

4

Es más fácil ajustar los DAO alrededor de los DAO ... depende de la cantidad de modelo que desee traer. Los DTO no se usan generalmente para traer consigo uno a muchos, como dos o más llamadas a bases de datos/dao separadas. En ese caso, realmente quieres un ORM. Desde su búsqueda de una respuesta dao ......

No hay nada que le impida unir los DAO para brindarle una DTO única. Es más fácil tener un DTO conectado a un DAO. No es realmente una capa de servicio, es solo bloques de DAO. Así que es posible que tenga un PersonDao y un TelephoneNumberDao. Una persona puede tener más de un número de teléfono, por lo que también podría tener PersonModelDAo, que usa PersonDao y TelephoneNumberDao bajo el capó para hacer su trabajo.

Como alternativa, evite todo el problema y no intente asignar el 1-N entre la persona y el número de teléfono en el nivel DTO. Simplemente haga que su UI haga las llamadas correctas al DAO correcto. De hecho, me gusta esto mejor cuando uso DTO.

+0

Me gusta esta respuesta (+1) es una pena perder la claridad de la persona.getTelephoneNumbers() –

3

Es común introducir una capa de servicio que envuelva sus DAO y maneje preocupaciones como esa. Si teme que esté poniendo demasiados códigos repetitivos en sus DTO para manejar la carga diferida, quizás usar AOP podría ser una forma de lograr esto. Es posible que desee examinar AspectJ y tejer ya sea en tiempo de compilación o en tiempo de carga. Como usted modificaría directamente el código de bytes, no tendría que preocuparse por la sobrecarga de rendimiento del AOP basado en proxy.