Шаблон DAO при использовании Hibernate - PullRequest
3 голосов
/ 06 сентября 2011

Мы используем hibernate в нашем приложении и хотели бы использовать шаблон DAO для реализации уровня данных приложения. Я видел несколько предложений по использованию ValueObjects / DTO для возврата данных из DAO

public interface EmployeeDAO {
  List<EmployeeDTO> getEmployees();
}

В чем преимущество возврата ValueObjects / DTO вместо того, чтобы возвращать объекты домена hibernate как

public interface EmployeeDAO {
  List<Employee> getEmployees();
}

Не является ли избыточным копирование данных из объекта гибернации в объект значения и наличие в памяти двух копий одних и тех же данных. Какое преимущество действительно добавляет ValueObjects?

Являются ли объекты ValueObject просто предпочтительными между бизнес-уровнями и уровнями представления, если они используются в DAO

Спасибо за любые предложения

Сива

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

DTO, как правило, следует избегать.Однако они могут быть полезны в некоторых ситуациях:

  • вместо того, чтобы возвращать целый граф объектов, возвращать специальные DTO, содержащие только интересную информацию.Это делает код более самодокументированным.В противном случае, особенно когда возвращаемые сущности отсоединены, трудно узнать, какие ассоциации загружены, а какие нет.
  • Когда вам нужно вернуть результат запроса, который не возвращает экземпляры сущностей (агрегатыи т. д.)
  • При использовании объектов Hibernate на стороне клиента по техническим причинам это невозможно (нет доступа к библиотекам Hibernate и т. д.).Хотя в этом случае, возможно, роль фасадного слоя заключается в преобразовании объектов в DTO, а не роль DAO.
1 голос
/ 06 сентября 2011

Основным преимуществом использования DTO является то, что другой уровень приложения не может изменять объекты реальной модели и, следовательно, изменять ваши данные.Вы делаете это, чтобы сохранить целостность и безопасность ваших данных.Имея это в виду, это может стоить того, если у вас есть жесткие требования к тому, кто / как может изменять данные.

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

...