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?