I don't use design patterns very often, besides an occasional factory and MVC, and I want to start using them more.

I have a concrete case at hand that I would like your opinion on the use of design patterns in this case.

In my application I have to convert objects pretty often in different situations. I might have to convert a Hibernate POJO to a DTO, because I use GWT and Hibernate POJO's aren't serializable and can't be sent over the line.

In another situation I might need to convert Java objects to SolrInputDocument's for indexing by Solr.

I would like to know if I should use a design pattern for this. It seems that "object conversion" is a generic task that could be handled in a flexible/abstract way by a pattern, but I don't really see how.

Without patterns I would just create a separate class for each type of conversion, for example CourseToSolrInputDocument (Course is a Hibernate entity in my application). Or CourseToCourseDTO. Each of these conversion classes might have a single static method called convert() that takes the source object as input and returns the output object.

But that is not really a pattern, is it? So I started of on something with generics and created this class that implements the Converter interface. But is somehow feels silly tgo create a generic interface and I don't really see the advantage other than being able to congratulate myself on the use of generics.

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

So, the real question here is: is there a pattern that applies to generic object conversion and, what would be your approach and what are the advantages over using just a class-per-conversion type approach?

  • Patterns are more of names for what you do (and example how to do it properly), than something awsome to use. So better question than how can I use more patterns is: What patters I already use (maybe in some incomplete/convoluted way). – user470365 Jan 31 '13 at 9:27

The Translator Pattern is what you're asking for.

But I suspect what you're looking for is a framework, more than a pattern. I believe Dozer is popular in the Java world.

  • I know Dozer and Apache Beanutils. I would like to use one of those inside my "conversion structure". I the meantime I found that Spring offers a solution for converting objects that can be found here: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . I had seen it before, but a long time ago, so my own interface was kind of based on what I remembered from Spring. I am going to go with the Spring solution, because Spring is already in my project and it looks like a good approach. – Julius Feb 1 '13 at 11:51

protected by gnat Oct 2 '18 at 14:58

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.