В чем разница между моделью просмотра и объектом передачи данных?

Я основываю этот вопрос на Fowler PoEAA. Учитывая ваше знакомство с этим текстом, не являются ли ViewModels, используемые в ASP.NET MVC, такими же, как DTO? Почему или почему нет? Спасибо.

Ответ 1

Они выполняют аналогичную задачу (инкапсулирование данных для другого уровня приложения), но они делают это по-разному и по разным причинам.

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

    Например, вы разрабатываете сайт электронной коммерции. CreateCustomer и AddCustomerAddress являются отдельными операциями на уровне базы данных, но вы можете по соображениям производительности захотите объединить свои данные в NewCustomerWithAddressDto, чтобы ваш клиент только должен был совершить один рейс туда-обратно на сервер, t нужно заботиться о том, чтобы сервер мог делать кучу разных вещей с пакетом данных.

  • Термин "ViewModel" означает несколько разные вещи в разных вкусах MV *, но его цель в основном заключается в разделении проблем. Ваша модель часто оптимизирована для какой-либо цели, отличной от презентации, и ответственность ViewModel заключается в том, чтобы отделить ваш вид от деталей реализации модели. Кроме того, большинство шаблонов MV * советуют сделать ваши представления "как можно глубже", и поэтому ViewModel иногда берет на себя ответственность за логику представления.

    Например, в том же приложении электронной коммерции ваш CustomerModel является неправильной формой для презентации в представлении "Новый клиент". Во-первых, у вашего представления есть два поля формы, чтобы ваш пользователь мог ввести и подтвердить свой пароль, а ваш CustomerModel не содержит поля пароля вообще! Ваш NewCustomerViewModel будет содержать эти поля и может, в зависимости от вашего вкуса MV *, отвечать за какую-либо логику представления (например, показать/скрыть части представления) и базовую проверку (например, убедиться, что оба поля пароля совпадают).

Ответ 2

Цель другая:

  • DTO используются для передачи данных
  • ViewModels используются для отображения данных конечному пользователю.

Таким образом, обычно ViewModels содержат данные презентации, ведь во многих случаях это похоже на то, что находится в DTO, но с некоторыми отличиями. Подумайте о представлении перечислений, локализации, валюте, форматах даты,.... Это связано с тем, что в вашем представлении не должно быть никакой логики.

Ответ 3

DTO в MVVM и MVP обычно Очень тупые объекты и представляют собой в основном просто набор свойств и геттеров. ViewModels, с другой стороны, могут иметь какое-то поведение.

Практический положительный побочный эффект использования DTO позволяет упростить сериализацию. Если у вас есть довольно сложный объект, скажем, С#, вы часто будете вынуждены избирательно отключать все, что вам не нужно сериализовать. Это может стать довольно уродливым, и DTO упрощают этот процесс.

Ответ 4

Модель просмотра и объект передачи данных имеют сходства и различия.

Похожие:  Перенос данных в запись (экземпляр объекта, возможно, сериализованный) в приемник, будь то просмотр или служба

Разница: Модель просмотра предназначена для отправки в представление, где оно будет отображаться, с форматированием. Модель просмотра также отправляет данные обратно контроллеру. DTO обычно не предназначен для представления. Он предназначен для отправки необработанных данных.