в чем разница между моделью и объектом передачи данных?
я основываю этот вопрос на Фаулере PoEAA. Учитывая ваше знакомство с этим текстом, разве ViewModels не используются в ASP.NET MVC то же самое, что DTOs? Почему или почему нет? Спасибо.
4 ответов
они служат аналогичной цели (инкапсулирование данных для другого уровня приложения), но они делают это по-разному и по разным причинам.
-
цель DTO-уменьшить количество вызовов между уровнями приложения, особенно когда эти вызовы являются дорогостоящими (например, распределенные системы). DTOs почти всегда тривиально сериализуемы и почти никогда не содержат никакого поведения.
например, вы разрабатываете сайт электронной коммерции.
CreateCustomer
иAddCustomerAddress
являются отдельными операциями на уровне базы данных, но вы можете по соображениям производительности захотеть объединить их данные вNewCustomerWithAddressDto
Так что вашему клиенту нужно только сделать одну поездку туда и обратно на сервер, и не нужно заботиться о том, что сервер может делать кучу разных вещей с пакетом данных. -
термин "ViewModel" означает несколько разные вещи в разных вкусах MV*, но его цель-в основном разделение проблем. Ваша модель часто оптимизируется для каких-либо целей, отличных от презентации, и ViewModel несет ответственность за отделение вашего представления от деталей реализации модели. Кроме того, большинство шаблонов MV* советуют сделать ваши представления как можно более "тупыми", и поэтому ViewModel иногда берет на себя ответственность за логику презентации.
например, в том же приложении электронной коммерции, ваш
CustomerModel
неправильная " форма "для представления на вашем представлении" нового клиента". Для во-первых, в вашем представлении есть два поля формы для ввода и подтверждения пароля пользователем, а такжеCustomerModel
не содержит поле пароля вообще! ВашNewCustomerViewModel
будет содержать эти поля и может, в зависимости от вашего вкуса MV*, отвечать за некоторую логику представления (например, для отображения/скрытия частей представления) и базовую проверку (например, обеспечение соответствия обоих полей пароля).
цель другая:
- DTO используются для передачи данных
- ViewModels используются для отображения данных конечному пользователю.
поэтому обычно ViewModels содержат данные презентации, ведьма во многих случаях похожа на то, что находится в DTO, но с некоторыми отличиями. Подумайте о представлении перечислений, локализации, валюте, форматах дат ... . Это потому, что обычно в вашем представлении не должно быть логики.
DTOs в MVVM и MVP обычно Очень Тупые Объекты и в основном просто куча сеттеров свойств и геттеров. ViewModels, с другой стороны, может иметь некоторое поведение.
практический положительный побочный эффект наличия DTOs позволяет упростить сериализацию. Если у вас есть довольно сложный объект, скажем, C#, вам часто придется выборочно отключать вещи, которые вы не хотите сериализовать. Это может стать довольно уродливым и DTOs упростить это процесс.
модель представления и объект передачи данных имеют сходства и различия.
похожие: Передача данных в записи (экземпляр объекта, возможно, сериализованный) в приемник, будь то представление или служба
разница: Модель представления предназначена для отправки в представление, где она будет отображаться, с форматированием. Модель представления также отправляет данные контроллеру. DTO обычно не предназначен для презентации. Он предназначен для отправки необработанных данных.