Сопоставить частичный DTO с объектом Domain - PullRequest
3 голосов
/ 17 ноября 2011

У нас есть гибкий клиент, которому мы отправляем объекты DTO. Это сделано, так как наш объект домена содержит много данных, и клиент в основном просматривает только небольшую часть данных.

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

Когда мы вносим изменения в клиент, мы отправляем DTO обратно на сервер.

Я хотел бы ознакомиться с рекомендациями по применению этих изменений к объекту домена и позволить сохранить его в hibernate.

Должен ли я сначала прочитать объект домена, а затем скопировать значения из DTO в объект домена?

Есть ли API, который может помочь мне в этом, поэтому мне не нужно создавать сопоставители для всех моих доменных объектов?

Ответы [ 2 ]

1 голос
/ 30 октября 2013

Когда вы возвращаете DTO, вы загружаете соответствующие объекты из базы данных и обновляете их в соответствии с состоянием DTO. Hibernate позаботится об отслеживании изменений, поэтому только измененные объекты будут сохранены обратно в БД.

Причина, по которой вы хотите сделать это в коде, заключается в дополнительной логике и проверке, которые применяются при применении изменений. Например

  • UserDTO имеет UserName для отображения в пользовательском интерфейсе, но вы не хотите легко это изменить, верно?
  • всегда проверяет пользовательский ввод, а DTO, поступающие с провода, являются пользовательским вводом
1 голос
/ 17 ноября 2011

В hibernate лучше использовать DTO как Bean, также это должно быть сопоставлено с table in DB.Подробнее о отображении в hibernate здесь . Это может измениться, если вы используете устаревшую базу данных.

Допустим, у меня есть 2 Бобов User и Address.Они будут сопоставлены с таблицами поддержки tUsers и tAddresses.Это типичная структура, которую вы размышляете в спящем режиме.Вы можете позвонить User и Address классу Бобу .

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

Мои определения спорны, но сначала я чувствую подход (с использованием Bean) хорош, независимо от того, как вы его называете DTO или Bean.

...