Подтвердить что ты не робот

Должен ли слой репозитория возвращать объекты передачи данных (DTO)?

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

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

Кроме того, если создание DTO происходит на уровне службы, то, что могло быть сделано ранее в одном вызове репозитория и, следовательно, в одном запросе базы данных, теперь должно произойти с несколькими вызовами репозитория на уровне службы, составить "окончательный DTO. Если, конечно, я не создаю объект транспорта между уровнем данных и сервисом, который может содержать такой сложный объект. Которая затем должна быть сопоставлена ​​с DTO. Это просто кажется расточительным ради чистоты. Но также неверно, что слой репозитория возвращает объекты, которые существуют только для отправки по проводу.

4b9b3361

Ответ 1

Короткий ответ: Нет.

Длинный ответ: репозиторий отвечает за преобразование сохраненных данных обратно в объекты (модели) и наоборот.

Модель - это бизнес-модель, представляющая бизнес-объект. DTO, с другой стороны, - в то время как выглядит Model - занимается передачей объекта между различными средами и по существу является переходным объектом. Обычно mappers отвечают за превращение модели в DTO.

Ответ 2

Таким образом, ваш репозиторий должен увлажнять всю сущность, даже если она не используется? Это кажется очень неэффективным. - ajbeaven 29 октября '18 в 23:25

Не могли бы вы добавить методы в интерфейс репозитория для вызовов, которым не нужно увлажнять всю сущность? Я полагаю, что это может привести к раздутым интерфейсам, что, я думаю, является одним из главных аргументов против.

Чтобы ответить на вопрос, я согласен с принятым ответом Нет. Реализации репозитория находятся в постоянном слое. Уровень домена может потребоваться для извлечения глубоких или мелких объектов из уровня постоянства, который ничего не знает, кроме интерфейса, который он должен реализовать. Если домен постоянно запрашивает полный холодильник, когда ему нужно только масло, тогда, возможно, интерфейсу (или, возможно, модели данных) потребуется некоторая работа.