L'intera idea di .NET MVC è quella.
I tuoi modelli devono lavorare nel tuo livello dati (Entity Framework, nHibernate o qualsiasi altra cosa ...) che rappresentano i tuoi dati, quindi la somiglianza con le tue tabelle. D'altra parte, dovrai definire i modi per presentare i dati ai tuoi utenti, cosa che avviene nelle visualizzazioni, e per farlo, puoi creare ViewModels. Possono sembrare uguali ma non sono uguali.
Prendiamo ad esempio un esempio in cui si ha un modello utente, un modello di gruppo in cui ogni utente ha un gruppo. I tuoi modelli di dati saranno Utente e Gruppo, ma il tuo ViewModel per creare un utente dovrebbe includere un elenco dei gruppi disponibili, in questo modo:
public class RegisterViewModel
{
public string UserName { get; set; }
public string Password { get; set; }
public string PasswordConfirmation { get; set; }
public IEnumerable<Group> AvailableGroups { get; set; }
public int SelectedGroup { get; set; }
}
In un ViewModel stai mescolando due modelli, tieni presente che possono essere molto di più.