2010-08-08 6 views
2

Мы должны использовать DTO для отправки данных на слой презентации и из него.JPA и DTO, лучший способ создать DTO?

У меня есть метод на объекте службы PostAd, в котором размещается объявление, введенное пользователем. Ad имеет связь с другим объектом называется AdValues, которые содержат значения для Ad (название, цена, описание и т.д.)

@Entity 
public class Ad { 
    @OneToMany 
    Set<AdValue> values ... 
    ... 

Я задаюсь вопросом, что лучше, насколько архитектура DTO идет:

  1. имеют два один DTO назвал AdDTO, а другой называется AdValuesDTO и вызвать метод PostAd, как PostAd(AdDTO, AdValuesDTO)~ или ~

  2. Уже AdDTO, содержащий AdValuesDTO имитирующего структуру сущности ... это подразумевает наличие DTO в пределах DTO-х:

    AdDTO { 
        Set<AdValuesDTO> adValues ... 
    

Тогда метод PostAd называется PostAd(AdDTO)

Или есть другой альтернатива?

ответ

8

Оба будут работать, но с последующим подходом вы также можете использовать DTO для отправки данных с серверу клиенту. И так как DTOs уже трудно и дорого поддерживать, вы действительно не хотите, чтобы их умножать, как Иисус, с хлебом.

Итак, по моему опыту, когда вы используете DTO, вы фактически оказываете симметричную структуру параллельно своим объектам, которые вы можете использовать в обоих направлениях между клиентом и сервером. И это позволяет использовать решение для сопоставления, например Dozer, или, по крайней мере, проще (и все, что делает использование DTO менее болезненным, приветствуется).

+2

Спасибо, я принял ваш совет, добавил бульдозер на мой ПОМ и удалил 75% кода плиты котла. –

+0

Один намек: держаться подальше от бульдозера. Это требует от вас разбить инкапсуляцию, а когда что-то не получается, это во время выполнения, а не во время компиляции. В настоящее время он основан на xml (= xml hell). И последнее, но не менее важное: Dozer sloooooow ... – user2054927

Смежные вопросы