MVC hat kein ViewModel, sondern ein Model, eine View und einen Controller. Ein ViewModel ist Teil von MVVM (Model-View-ViewModel). MVVM ist vom Präsentationsmodell abgeleitet und in WPF populär geworden. Es sollte auch ein Model in MVVM geben, aber die meisten Leute verpassen den Sinn dieses Musters völlig und haben nur eine View und ein ViewModel. Das Modell in MVC ist dem Modell in MVVM ähnlich.
In MVC ist der Prozess in 3 verschiedene Verantwortlichkeiten aufgeteilt:
- Die Ansicht ist für die Darstellung der Daten für den Benutzer verantwortlich
- Ein Controller ist für den Ablauf der Seite verantwortlich
- Ein Modell ist für die Geschäftslogik zuständig
MVC ist für Webanwendungen nicht sehr geeignet. Es ist ein Muster, das von Smalltalk für die Erstellung von Desktop-Anwendungen eingeführt wurde. Eine Webumgebung verhält sich völlig anders. Es macht nicht viel Sinn, ein 40 Jahre altes Konzept aus der Desktop-Entwicklung zu kopieren und in eine Web-Umgebung einzufügen. Viele Leute denken jedoch, dass dies in Ordnung ist, weil ihre Anwendung kompiliert und die richtigen Werte zurückgibt. Meiner Meinung nach reicht das nicht aus, um eine bestimmte Designentscheidung für in Ordnung zu erklären.
Ein Beispiel für ein Modell in einer Webanwendung könnte sein:
public class LoginModel
{
private readonly AuthenticationService authentication;
public LoginModel(AuthenticationService authentication)
{
this.authentication = authentication;
}
public bool Login()
{
return authentication.Login(Username, Password);
}
public string Username { get; set; }
public string Password { get; set; }
}
Der Kontrolleur kann sie wie folgt verwenden:
public class LoginController
{
[HttpPost]
public ActionResult Login(LoginModel model)
{
bool success = model.Login();
if (success)
{
return new RedirectResult("/dashboard");
}
else
{
TempData["message"] = "Invalid username and/or password";
return new RedirectResult("/login");
}
}
}
Ihre Steuerungsmethoden und Ihre Modelle werden klein, leicht testbar und auf den Punkt gebracht sein.