4

Имеется модель объектов, DAO интерфейсы для каждого класса объектов, сервис классы с имплементацией каждого DAO интерфейса. Требуется реализовать слой DTO. Подскажите чем отличается DTO от реализации DAO? И как правильно организовать в таком случае DTO?

  • 1
    dto - это упрощенные модельки для отдачи куда-то. Простые POJO с геттерами и сеттерами без логики. Обычно без циклических ссылок. dao тут ни при чем. – Nofate Jul 27 '16 at 11:41
  • http://ru.stackoverflow.com/questions/456623/%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D1%8B%D0%B9-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D1%8F-dto-poco-pojo-%D0%B8-value-object/456637#456637 – Nofate Jul 27 '16 at 11:42

1 Answers1

6

DTO - это аббревиатура для передачи данных объекта, поэтому он используется для передачи данных между классами и модулями вашего приложения. DTO должен содержать только private поля для ваших данных, getters, setters и конструкторы. Не рекомендуется добавлять бизнес-логики методы таких классов, но это нормально, чтобы добавить некоторые утилиты.

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

interface PersonDTO {
    String getName();
    void setName(String name);
    //.....
}

interface PersonDAO {
    PersonDTO findById(long id);
    void save(PersonDTO person);
    //.....
}

Заключение

DTO является объектом передачи данных. Это в основном объект значение, используемое для передачи структурированных данных между уровнями / слоями

DAO является объектом доступа к данным. Он несет ответственность за сокрытие деталей реализации о том, как хранятся ваши данные и как он извлекается.

  • 1
    DTO тоже я как вижу интерфейс? А реализацию передачи данных уже например в UI, т.е имплементацию интерфейса где должна проходить? – Александр Дерменжи Jul 27 '16 at 13:31
  • @АлександрДерменжи реализовать Dto модель нужно на сервере , которая будет использоваться на клиенте. – Senior Pomidor Jul 27 '16 at 15:19
  • Могу я попрасить проверить то что у меня получилось? Или лучше создать отдельную тему для ревью? Имеется проект с объектами, DAO, DTO, сервисы. Так как не уверен как связан DTO с реальными объектами: https://github.com/Dermenji/WeatherOOP/tree/master/src/com/sirma – Александр Дерменжи Aug 02 '16 at 11:59
  • @АлександрДерменжи лучше создавать отдельную тему, чтобы не засорять этот вопрос – Senior Pomidor Aug 02 '16 at 12:03
  • 1
    @АлександрДерменжи уже вижу одно замечание по ДАО – Senior Pomidor Aug 02 '16 at 12:14
  • http://ru.stackoverflow.com/questions/551178/%D0%A0%D0%B5%D0%B2%D1%8C%D1%8E-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0-object-model-dao-dto-services Буду очень рад если напишите Ваше замечание – Александр Дерменжи Aug 02 '16 at 13:00