где я должен сделать преобразование: Доменный объект <-> DTO? - PullRequest
4 голосов
/ 13 марта 2010

На уровне домена или уровне доступа к данным?

Ответы [ 3 ]

5 голосов
/ 13 марта 2010

Основной мотивацией для DTO является представление интерфейса, предназначенного для другого уровня (обычно уровня представления). Например, экран ввода данных может нуждаться в некоторых битах данных из объекта User в дополнение к некоторым битам из Order и т. Д. В этом случае домен в DTO должен происходить на уровне, который вызывает уровень представления, то есть обычно слой "обслуживания".

Существуют такие библиотеки, как Dozer , которые автоматизируют основную работу по конвертации между моделями доменов и DTO.

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

2 голосов
/ 13 марта 2010

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

0 голосов
/ 23 марта 2019

Если поместить это в контекст MVC, если у вас есть и контроллеры, и уровень сервисов, вы должны поместить его в контроллер. Это сделало бы DTO ближе к уровню представления и позволило бы уровню обслуживания играть только с объектами домена, избегая возможной путаницы с другими моделями.

Сам DTO на самом деле является моделью MVC (Объяснено здесь: https://stackoverflow.com/a/1058186).

Ниже приведен рекомендуемый учебник, который объединяет концепции контроллера, сервисного уровня и DTO (в Java используется среда Spring, но концепция понятна и для других платформ): https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

...