В чем разница между объектом переноса даты (DTO) и объектом представления шаблона проектирования, управляемого доменом?

#domain-driven-design #dto

#domain-driven-design #dto

Вопрос:

Я знаю, что DTO возвращается на стороне сервера и принимается на стороне клиента, но меня смущает объект представления в DDD. Я думаю, что они почти одинаковы. Может кто-нибудь рассказать мне о своих различиях?

Ответ №1:

Может кто-нибудь рассказать мне о своих различиях?

Они решают разные проблемы в разных контекстах

Передача данных является пограничной проблемой — как мы перемещаем информацию отсюда туда (через удаленный интерфейс)? Среди проблем, с которыми вы можете столкнуться: передача информации происходит медленно или дорого. Один из способов держать это под контролем — перемещать информацию в большем зерне.

основная причина использования объекта передачи данных заключается в объединении нескольких удаленных вызовов в один вызов — Мартин Фаулер, Patterns of Enterprise Application Architecture

Другими словами, DTO — это ваше программное представление сообщения fat.

В DDD шаблон объекта значений является проблемой моделирования; он используется для объединения неизменяемых представлений информации и связанных вычислений.


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

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


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

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

(Существует своего рода система защиты, которая нуждается в постоянстве, нам нужен какой-то способ получить информацию из объекта в представление, которое можно сохранить и извлечь. Это не обязательно относится к объекту значения, особенно если вы готовы использовать структуры данных общего назначения для перемещения информации в «модель» и из нее.)


В царстве существительных линии могут быть размытыми — отчасти потому, что любая информация, которая не является структурой данных / примитивом общего назначения, является «объектом», а отчасти потому, что вам часто может сойти с рук использование одних и тех же объектов для ваших внутренних задач и граничных узлов.