Padrão de design para conversão de objetos (java)

21

Não uso padrões de design com muita frequência, além de uma fábrica ocasional e MVC, e quero começar a usá-los mais.

Tenho um caso concreto em que gostaria de sua opinião sobre o uso de padrões de design nesse caso.

No meu aplicativo, tenho que converter objetos com bastante frequência em diferentes situações. Talvez eu precise converter um POJO do Hibernate em um DTO, porque uso o GWT e os POJO do Hibernate não são serializáveis ​​e não podem ser enviados por linha.

Em outra situação, talvez seja necessário converter objetos Java em SolrInputDocument para indexação pelo Solr.

Gostaria de saber se devo usar um padrão de design para isso. Parece que a "conversão de objetos" é uma tarefa genérica que pode ser tratada de maneira flexível / abstrata por um padrão, mas eu realmente não vejo como.

Sem padrões, eu apenas criaria uma classe separada para cada tipo de conversão, por exemplo CourseToSolrInputDocument (Course é uma entidade Hibernate no meu aplicativo). Ou CourseToCourseDTO. Cada uma dessas classes de conversão pode ter um único método estático chamado convert()que pega o objeto de origem como entrada e retorna o objeto de saída.

Mas isso não é realmente um padrão, é? Então comecei com algo genérico e criei essa classe que implementa a interface do conversor. Mas, de alguma forma, é bobagem criar uma interface genérica e não vejo outra vantagem além de poder me parabenizar pelo uso de genéricos.

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Portanto, a verdadeira questão aqui é: existe um padrão que se aplica à conversão genérica de objetos e qual seria sua abordagem e quais são as vantagens de usar apenas uma abordagem de tipo classe por conversão?

Julius
fonte
Padrões são mais nomes para o que você faz (e, por exemplo, como fazê-lo corretamente), do que algo impressionante de usar. Uma pergunta tão melhor do que como posso usar mais padrões é: Quais padrões eu já uso (talvez de alguma maneira incompleta / complicada).
user470365

Respostas:

18

O padrão do tradutor é o que você está pedindo.

Mas eu suspeito que o que você está procurando é uma estrutura, mais que um padrão. Acredito que Dozer é popular no mundo Java.

pdr
fonte
Eu conheço Dozer e Apache Beanutils. Eu gostaria de usar um desses dentro da minha "estrutura de conversão". Enquanto isso, descobri que o Spring oferece uma solução para converter objetos que podem ser encontrados aqui: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Eu já tinha visto isso antes, mas há muito tempo, então minha própria interface era baseada no que eu lembrava do Spring. Vou usar a solução Spring, porque o Spring já está no meu projeto e parece uma boa abordagem.
Julio