ViewModels worden gebruikt om je model (domein) nog verder af te schermen van je view waardoor de koppeling tussen beide losser is.
Je bouwt je ViewModel op basis van hetgeen je nodig hebt in de View. Dus je kijkt bij het bouwen van je ViewModel nog niet naar je Model zelf.
Stel dat je alle klanten wilt tonen op je webpagina. Met hun voornaam, familienaam en e-mail adres. Dit is hetgeen je nodig hebt in je View.
Code:
public class CustomerViewModel
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string Email { get; private set; }
public CustomerViewModel(Customer customer) {
this.FirstName = customer.FirstName;
this.LastName = customer.LastName;
this.Email = customer.Email;
}
}
Als je dit nu meegeeft naar je View kan je dus de firstname, lastname, en email opvragen van de klant.
Waarom niet gewoon het customer object doorgeven?
Het customer object kan nog veel properties hebben die de view niet nodig heeft. De view kan dan tevens ook gewoon waarden van de customer gaan wijzigen.
Wanneer er iets veranderd in je model van je customer moet je niets wijzigen in je view. Stel dat er 5 views zijn die het customer object nodig hebben en je beslist om in je model de firstname en lastname samen te voegen, dan moet je al je views gaan aanpassen. Anders kan je gewoon in je ViewModel zeggen
Code:
public class CustomerViewModel
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string Email { get; private set; }
public CustomerViewModel(Customer customer) {
string[] split = customer.Split(' ');
this.FirstName = split[0];
this.LastName = split[1];
this.Email = customer.Email;
}
}
Het is maar een simpel voorbeeld maar ik hoop dat je hiermee het grotere beeld ziet van wat de voordelen er van zijn.