2009-11-25 6 views
17

Я пытаюсь найти простой способ сопоставить DTO с объектами без кода котельной. Хотя я думал о использовании бульдозера, похоже, требуется много xml-конфигурации. Кто-нибудь видел альтернативу бульдозера, которая использует DSL для настройки отображения bean-компонентов в чистой Java?Альтернатива бульдозеру для отображения бобов?

В идеале я надеюсь найти компоновщик фасоли, который вдохновлен тем, как Гуис делает что-то.

+0

Другим вариантом будет http://jtransfo.org/. Это позволяет определять отображения с помощью аннотаций на TO. В нем есть дополнительная функция, позволяющая иметь безопасные/необязательные преобразования на основе тегов. –

+1

взгляните на https://github.com/amgohan/zebra/: (отображение объектов объектов DIY и использование зебры для унифицированного способа ввода указателей.) Zebra поставляется с простым и унифицированным способом: создавать ваши карты; управлять одним способом и обратным отображением в одном классе; зарегистрируйте свои карты и повторно используйте их в любом месте приложения; управлять глубоким картированием. – amgohan

+0

Это довольно хорошая альтернатива: http://modelmapper.org/ – cosbor11

ответ

9

Я искал альтернативы, а также.

Here - очень хорошее покрытие различных вариантов.

16

Посмотрите на Orika.

Orika - это структура отображения Java Bean, которая рекурсивно копирует (среди других возможностей) данные с одного объекта на другой. Это может быть очень полезно при разработке многослойных приложений.

+0

Orika выполнил эту работу для меня, обработал картотеку для коллекции без особых усилий. Очень мощная и полезная библиотека ИМО. –

3

С моей точки зрения, конфигурация или код Java для отображения некоторых специальных свойств всегда необходимы.

Здесь я хочу взять DO и DTO, например

DO:{ 
    id: "id", 
    name:"name", 
    doName1: "doName1", 
    nestedObj: { 
     id: "nestedObjId", 
     name: "nestedObjName" 
    } 
} 

DTO{ 
    id: "", 
    name: "", 
    name1: "" // for mapping doName1 in DO. 
    nestedId: "", //for DT.nestObj.id 
    nestedName: "", //for DT.nestObj.name 
} 

Для бульдозер или Orika они оба могут автоматически сопоставляет идентификатор и имя свойства между DO и DTO без какой-либо конфигурации или кода Java, потому что они с те же имена и типы свойств. Но если вы хотите DO.doName1 < ---->DTO.name1 или DO.nestedObj.id < --->DTO.nestedId вам нужно сделать некоторую конфигурацию (через xml или java), чтобы сообщить инструменту сопоставления, который вы намереваетесь сделать. Я думаю, что для вашего случая использования, Dozer, Orika и ModelMapper все в порядке. Но для меня я переключил свой проект с бульдозера на Орику для достижения цели. Хотя Орика не настолько зрелая, как бульдозер, но не настолько интеллигентная и требует от меня дополнительной работы, чтобы поддерживать настроенные настройки отображения. Если ваш проект не слишком заботится о производительности, я порекомендую вам бульдозер, он настолько прост в использовании и поддерживает множество расширенных функций. В противном случае, если вы покупаете высокую производительность, я предлагаю вам orika.