#domain-driven-design #dto
#domain-driven-design #dto
Вопрос:
Я знаю, что DTO возвращается на стороне сервера и принимается на стороне клиента, но меня смущает объект представления в DDD. Я думаю, что они почти одинаковы. Может кто-нибудь рассказать мне о своих различиях?
Ответ №1:
Может кто-нибудь рассказать мне о своих различиях?
Они решают разные проблемы в разных контекстах
Передача данных является пограничной проблемой — как мы перемещаем информацию отсюда туда (через удаленный интерфейс)? Среди проблем, с которыми вы можете столкнуться: передача информации происходит медленно или дорого. Один из способов держать это под контролем — перемещать информацию в большем зерне.
основная причина использования объекта передачи данных заключается в объединении нескольких удаленных вызовов в один вызов — Мартин Фаулер, Patterns of Enterprise Application Architecture
Другими словами, DTO — это ваше программное представление сообщения fat.
В DDD шаблон объекта значений является проблемой моделирования; он используется для объединения неизменяемых представлений информации и связанных вычислений.
DTO имеет тенденцию выглядеть как структура данных с методами, которые можно использовать для преобразования этой структуры данных в представление (например: массив байтов), которое может быть отправлено через границу.
Объект значения имеет тенденцию выглядеть как структура данных с методами, которые можно использовать для вычисления другой информации, которая может быть интересна в вашем домене.
DTO, как правило, более стабильны (или, по крайней мере, обратно совместимы) по необходимости — поскольку производитель и потребитель удалены друг от друга, координация изменений в обоих требует больше усилий, чем одно локальное изменение.
Объекты значений, напротив, легче изменить, потому что они относятся к модели предметной области. ЕСЛИ вы хотите изменить модель, это только одно, и, соответственно, его легче координировать.
(Существует своего рода система защиты, которая нуждается в постоянстве, нам нужен какой-то способ получить информацию из объекта в представление, которое можно сохранить и извлечь. Это не обязательно относится к объекту значения, особенно если вы готовы использовать структуры данных общего назначения для перемещения информации в «модель» и из нее.)
В царстве существительных линии могут быть размытыми — отчасти потому, что любая информация, которая не является структурой данных / примитивом общего назначения, является «объектом», а отчасти потому, что вам часто может сойти с рук использование одних и тех же объектов для ваших внутренних задач и граничных узлов.