Шаблон проектирования для преобразования объекта (Java)

21

Я не очень часто использую шаблоны проектирования, кроме случайной фабрики и MVC, и хочу больше их использовать.

У меня под рукой конкретный случай, и я хотел бы узнать ваше мнение об использовании шаблонов проектирования в этом случае.

В моем приложении мне приходится конвертировать объекты довольно часто в разных ситуациях. Возможно, мне придется преобразовать Hibernate POJO в DTO, потому что я использую GWT, а Hibernate POJO не сериализуемы и не могут быть отправлены через линию.

В другой ситуации мне может понадобиться преобразовать объекты Java в SolrInputDocument для индексации с помощью Solr.

Я хотел бы знать, должен ли я использовать шаблон дизайна для этого. Кажется, что «преобразование объекта» - это общая задача, которая может быть гибко или абстрактно обработана шаблоном, но я не совсем понимаю, как это сделать.

Без шаблонов я бы просто создал отдельный класс для каждого типа преобразования, например CourseToSolrInputDocument (курс - это объект Hibernate в моем приложении). Или CourseToCourseDTO. Каждый из этих классов преобразования может иметь один статический метод, convert()который принимает исходный объект в качестве входных данных и возвращает выходной объект.

Но это не совсем закономерность? Итак, я начал с чего-то с дженериков и создал этот класс, который реализует интерфейс Converter. Но как-то глупо создавать общий интерфейс, и я не вижу в этом никакого преимущества, кроме как поздравить себя с использованием обобщений.

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.
    }
}

Итак, реальный вопрос здесь заключается в следующем: существует ли шаблон, который применяется к преобразованию универсальных объектов, и каков будет ваш подход и каковы преимущества по сравнению с использованием только подхода типа «класс на преобразование»?

Юлий
источник
Шаблоны - это больше названия для того, что вы делаете (и пример того, как это сделать правильно), чем что-то удивительное в использовании. Поэтому лучший вопрос, чем то, как я могу использовать больше паттернов: какие паттерны я уже использую (возможно, каким-то неполным / запутанным способом).
user470365

Ответы:

18

Переводчик шаблон является то , что вы просите.

Но я подозреваю, что вы ищете, это рамки, а не шаблон. Я считаю, что Dozer популярен в мире Java.

прецизионный самописец
источник
Я знаю Dozer и Apache Beanutils. Я хотел бы использовать один из них внутри моей "структуры преобразования". Тем временем я обнаружил, что Spring предлагает решение для преобразования объектов, которое можно найти здесь: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Я видел это раньше, но очень давно, поэтому мой собственный интерфейс был основан на том, что я вспомнил из Spring. Я собираюсь пойти с решением Spring, потому что Spring уже в моем проекте, и это выглядит как хороший подход.
Юлий