vista tutorial net mvc modelo español entre ejemplos diferencias controlador asp asp.net-mvc design-patterns software-design poeaa

asp.net mvc - tutorial - ¿Cuál es la diferencia entre un modelo de vista y un objeto de transferencia de datos?



mvc ejemplos (4)

El propósito es diferente:

  • Los DTO se usan para transferir datos
  • ViewModels se usa para mostrar datos a un usuario final.

Por lo tanto, normalmente ViewModels contiene los datos de la presentación, que en muchos casos es similar a lo que está en un DTO, pero con algunas diferencias. Piense en la representación de enumeraciones, localización, moneda, formatos de fecha, .... Esto es porque normalmente no debería haber lógica en su vista.

Estoy basando esta pregunta en Fowler PoEAA. Dado su conocimiento de este texto, ¿no son los ViewModels utilizados en ASP.NET MVC los mismos que los DTO? ¿Por qué o por qué no? Gracias.


Los DTO en MVVM y MVP generalmente son objetos muy tontos y básicamente son solo un conjunto de iniciadores de propiedades y getters. ViewModels por otro lado puede tener algún comportamiento.

Un efecto secundario positivo práctico de tener DTO es permitir una serialización más fácil. Si tiene un objeto bastante complejo, digamos C #, a menudo tendrá que apagar selectivamente las cosas que no desea serializar. Esto puede ser bastante feo y los DTO simplifican este proceso.


Sirven para un propósito similar (encapsulando datos para otra capa de la aplicación) pero lo hacen de manera diferente y por diferentes razones.

  • El objetivo de una DTO es reducir el número de llamadas entre los niveles de una aplicación, especialmente cuando esas llamadas son caras (por ejemplo, sistemas distribuidos). Los DTO son casi siempre trivialmente serializables, y casi nunca contienen ningún comportamiento.

    Por ejemplo, está desarrollando un sitio de comercio electrónico. CreateCustomer y AddCustomerAddress son operaciones separadas en el nivel de la base de datos, pero es posible que por razones de rendimiento desee agregar sus datos a NewCustomerWithAddressDto para que su cliente solo tenga que realizar un viaje de ida y vuelta al servidor y no tenga que preocuparse de que servidor podría estar haciendo muchas cosas diferentes con el paquete de datos.

  • El término "ViewModel" significa cosas ligeramente diferentes en diferentes sabores de MV *, pero su propósito es principalmente la separación de preocupaciones. Su modelo se optimiza con frecuencia para algún fin que no sea la presentación, y es responsabilidad de ViewModel desacoplar su vista de los detalles de implementación del modelo. Además, la mayoría de los patrones de MV * aconsejan que sus Vistas sean lo más "tontas" posible, por lo que el ViewModel a veces asume la responsabilidad de la lógica de presentación.

    Por ejemplo, en la misma aplicación de comercio electrónico, su CustomerModel es la "forma" incorrecta para la presentación en su vista de "nuevo cliente". Para empezar, su Vista tiene dos campos de formulario para que su usuario ingrese y confirme su contraseña, ¡y su CustomerModel no contiene ningún campo de contraseña! Su NewCustomerViewModel contendrá esos campos y podría, dependiendo de su sabor de MV *, ser responsable de alguna lógica de presentación (por ejemplo, para mostrar / ocultar partes de la vista) y validación básica (por ejemplo, asegurarse de que coincidan ambos campos de contraseña).


Un modelo de vista y un objeto de transferencia de datos tienen similitudes y diferencias.

Similar: Transfiere datos en un registro (instancia de objeto, quizás serializado) a un receptor, ya sea una vista o un servicio

Diferencia: un modelo de vista está destinado a ser enviado a una vista, donde se mostrará, con formato. Un modelo de vista también devuelve datos a un controlador. Un DTO generalmente no está destinado a la presentación. Está destinado a enviar datos brutos.