Me gusta trabajar con DTOs, tiene varias ventajas y también desventajas. Para el que no conoce el patrón DTO (Data transfers Object) indica que debemos crear objetos para transferir datos a la capa de presentación.
Son entidades serializables que se suelen utilizar en la transferencia de información entre capas físicas de la aplicación. También son útiles en situaciones donde queremos desvincular capas aunque no exista una división física real. Los DTOs representan la información de las objetos de negocio a partir de cierto nivel (o componentes) de nuestra aplicación.
Usando DTOs conseguimos tener una mayor separación física y lógica. Pero tenemos que trabajar más, claro, tenemos que sincronizar los objetos de modelo o negocio con nuestros DTOs y como no nos gusta trabajar mucho, existe jDTO binder.
jDTO binder nos permite por medio de anotaciones sincronizar nuestros DTOs con los objetos del modelo. Dicho framework se hace cargo de la copia de datos entre objetos e incluso formateo y conversión de datos.jDTO de acuerdo con el código fuente es libre con licencia Apache. También se puede encontrar en su proyecto de GitHub.
Veamos ejemplo:
Hacemos una clase persona:
public class Person implements Serializable { private long id; private String firstName; private String lastName; private Date birthDay; //GETTERS AND SETTERS }
Hacemos el DTO
public class PersonDTO implements Serializable { //bound by convention private long id; @Source(value="birthDay", merger=DateFormatMerger.class, mergerParam="dd/MM/yyyy") private String birthday; @Sources(value={@Source("firstName"), @Source("lastName")}, merger=StringFormatMerger.class, mergerParam="%s %s") private String fullName; //GETTERS AND SETTERS }
Y luego sincronizamos:
DTOBinder binder = DTOBinderFactory.getBinder(); //bind a person to a person DTO Person person = SampleData.samplePerson(); PersonDTO dto = binder.bindFromBusinessObject(PersonDTO.class, person);
Y listo!
Dejo el repositorio de maven:
org.jdto jdto 1.2 org.slf4j slf4j-log4j12 1.6.2 commons-lang commons-lang 2.6
Dejo links:
http://www.jdto.org/
https://github.com/jDTOBinder/jdto-binder
http://jcavallotti.blogspot.com.ar/2011/10/jdto-binder.html