TOC

This article has been localized into Spanish by the community.

Modelos:

ViewModels

Ya hemos trabajado con modelos múltiples veces en este tutorial, pero sí alrededor en otro material sobre ASP.NET MVC o solamente sobre el patrón MVC en general, tú puedes notar que algo llamado un "View-Model" es mencionado frecuentemente. pero ¿cuál es la diferencia entre un Model y un ViewModel?. De hecho, siempre que tú pasas un modelo a una vista o más es considerado un ViewModel porque éste es usado por la vista. En otras palabras, no hay una diferenciación puedes usar tus Models tanto como tus ViewModels.

Hay, sin embargo, muchas situaciones dónde puedes querer crear un ViewModel específico para una lista específica. Esto puede ser para extender o simplificar un modelo existente, o porque tú quieres representar algo en tu vida que no está cubierto por uno de tus modelos.

Los ViewModels son frecuentemente puestos en tu propio directorio en tu proyecto, llamado "ViewModels". De nuevo, esto es sólo una convención y ya que son clases regulares de .NET, eres libre de colocarlos donde sea que quieras, pero normalmente hace Sentido seguir estas convenciones juntos algunas personas también prefieren agregar un postfijo al nombre de la clase con la palabra ViewModel, por ejemplo "AddressViewModel" o "EditUserViewModel".

¿Cuándo usar un ViewModel?

Aquí hay un par de situaciones donde podrías beneficiarte de un ViewModel:

para representar algo en la vista que no esta ya contenido por un modelo existente: Cuando pasas un modelo a la vista, eres libre de pasar por ejemplo una cadena otro tipo simple, pero si tú quieres pasar múltiples valores o más puede hacer más sentido crear un simple ViewModel para almacenar los datos, como éste:

public class AddressViewModel    
{    
public string StreetName { get; set; }    

public string ZipCode { get; set; }    
}

Para acceder a los datos de múltiples modelos desde la misma vista: esto es relevante en muchas situaciones, por ejemplo cuando quieres crear un formulario donde puedas editar la información de múltiples modelos al mismo tiempo. Podrías crear un ViewModel como éste:

public class EditItemsViewModel      
{  
public Model1Type Model1 { get; set; }      

public Model2Type Model2 { get; set; }      
}

Para simplificar un modelo existente: imagina que tienes una gran clase con información sobre un usuario. Quizás incluso información sensible como contraseñas. Cuando quieras exponer esta información a la vista, puede ser beneficiarios solamente poner las partes que necesites. Por ejemplo, el pequeño widget mostrando que el usuario está logueado, cuál nombre de usuario tienen y Por cuánto han estado logueados. Así que en vez de pasar tu modelo User entero, puedes pasar un ViewModel más ligero, diseñado específicamente para este propósito:

public class SimpleUserInfoViewModel   
{
    public string Username { get; set; }

    public TimeSpan LoginDuration { get; set; }  
}

Para extender un modelo existente con datos relevantes solamente para la vista: en otra mano, a veces su modelo contiene menos información que la que necesitas en tu vista. Un ejemplo de esto podría ser que tú quieres algunas propiedades convenientes o métodos los cuales son solamente relevantes para la visa y no para todo su modelo en general, como en este ejemplo donde extendemos un modelo User (llamado WebUser) con una propiedad LoginDuration oma calculado de la propiedad LastLogin DateTime que ya se encuentra en la clase WebUser:

public class WebUser    
{    
public DateTime LastLogin { get; set; }    
}

De aquí a allá hay dos formas de hacer esos: Tú puedes extender esta clase(heredar de ella) o agregar una propiedad para la instancia WebUser en el ViewModel. Como esto:

public class UserInfoViewModel
{
    public WebUser User { get; set; }

    public TimeSpan LoginDuration
    {
get
{
    return DateTime.Now - this.User.LastLogin;
}
    }
}

O como esto:

public class ExtendedUserInfoViewModel : WebUser
{
    public TimeSpan LoginDuration
    {
get
{
    return DateTime.Now - this.LastLogin;
}
    }
}

Resumen

Un ViewModel es básicamente un modelo pasado a la vista, pero como es marcado en este artículo, formas de hacer el- tú puedes usar un modelo existente, tal cómo está, cómo crear un nuevo, específico para la vista en cuestión.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!