sábado, 30 de junio de 2012

jDTO Binder


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