Freitag, 30. März 2012

März 2012 / ASP.NET MVC 3

MVC - Model View Controller

MVC steht für Model View Controller und ist eine Architektur in der Software-Entwicklung. Sie besteht aus 3 Einheiten nämlich Model(Datenmodell), View(Präsentation - UI) und Controller(Programmsteuerung).
Ziel der Architektur ist es, spätere Änderungen oder Erweiterungen zu vereinfachen und die Wiederverwendbarkeit einzelner Klassen & Komponenten.

Model:

Zumindest in ASP.NET MVC 3, welches ich verwendet habe, gibt es eigentlich 2 Arten von Models. Die 1. Art heisst "Domainmodel", ist komplett von View und Controller unabhängig und wird verwendet, um die Datenbankstruktur hinter der Anwendung zu kreieren.
Dazu wird das Entity Framework verwendet, welches "CodeFirst" ermöglicht verwendet. Dazu jedoch später mehr.
Die 2. Art heisst "Viewmodel" und wiederspiegelt die View. Das heisst es ist der View angepasst, so dass alle nötigen Informationen von der View an den Controller weitergegeben werden kann, diese Daten werden jedoch nicht direkt sondern gefiltert und über ein Domainmodel in die Datenbank gespeichert. Diese Models sind sozusagen von der View abhängig und müssen somit bei Änderungen ebenfalls angepasst werden.

Controller

Der Controller ist die Steuerung der Applikation und verwaltet eine oder mehrere Views. Von diesen nimmt er die Benutzerinteraktionen entgegen, wertet diese aus und reagiert entsprechend. Er ist ebenfalls dafür zuständig, die erhaltenen Daten falls nötig zu manipulieren und/oder zu speichern/ändern/löschen.

View

Die View ist lediglich für die Darstellung zuständig. Hier wird also die Grafische Oberfläche definiert und mit den vom Controller, als Model erhaltenen Daten gefüllt. Die View selbst enthält aber keine Logik, sondern Sendet die Daten bloss an den Controller weiter. Eine View hat zwingend immer einen Controller, damit diese Überhaupt angezeigt werden kann, kann jedoch ohne Model auskommen.

ASP.NET MVC 3

ASP.NET MVC 3 ist ein Framework zum erstellen von Websites, basierend auf ASP.NET und dem .NET Framework. Die Website wird natürlich mit der MVC-Architektur erstellt, was durch dieses Framework hervorragend unterstützt wird. Es basiert auf dem .NET Framework 4.0 was eine Verwendung von Visual Studio 2010 nötig macht, da die früheren Visual Studio Versionen diese .NET Version nicht unterstützen.

Entity Framework

MVC 3 integriert das Entity Framework, welches CodeFirst unterstützt. Dass ermöglicht uns aus den Models der Webanwendung die Datenbank kreieren zu lassen.
Die Models werden also wie ganz normale Klassen erstellt und mit Eigenschaften versehen. Möchte ich z.B. eine Webanwendung mit verschiedenen Alben erstellen kann ich das Model folgendermassen realisieren:

public class Album
{
    public int AlbumId { get; set; }
    public string Titel { get; set; }
    public int Preis { get; set; }
}

Das Entity Framework erstellt daraus eine Tabelle, welche die Eigenschaften der Klasse als Spalten verwendet.
Es verwendet das sogenannte ORM (object relational mapping), was aus objektorientierten Datenmodellen relationale Datenbanken generiert. Das erleichtert das Programmieren ungemein, da für das Programm alles komplett objektorientiert bleibt.Die SQL-Befehle werden ebenfalls durch das Entity Framework generiert, was dem Entwickler ebenfalls viel Arbeit abnimmt.

Strongly-typed View

Eine Strongly-typed View hat immer ein Model als Parameter, was ja bekanntlich nicht bei jeder View der Fall ist. Dafür muss folgender Code in die 1. Zeile der View:
@model Namespace.Models.Album
Diese Views ermöglichen, dass direkt auf die Eigenschaften des übergebenen Models zugegriffen werden kann. Das erleichtert die Programmierung stark und ermöglicht vollen IntelliSense Support. Somit kann, bei einer Strongly-typed View auf Album mit folgendem Code auf den Preis des Models zugegriffen werden:
@Model.Preis
Es können ebenfalls mehrere Models übergeben werden, wodurch auch auf alle Models zugegriffen werden kann. Dazu muss die 1. Zeile der View mit IEnumerable modifiziert werden:
@model IEnumerable
Anschliessend kann z.B. auf die Anzahl übergebener Models mit @Model.Count() zugegriffen, oder alle mit einer foreach-Schlaufe aufgelistet werden.
@foreach (var album in Model)
{
    @Model.Titel
}

Validierung der Daten

Wird z.B. eine View erzeugt, um neue Alben zu erfassen, müssen natürlich gewisse Validierungs-Regeln wie die maximale Zeichenlänge oder der Datentyp der einzelnen Eigenschaften definiert werden. Das schöne hier ist, dass alle Validierungs-Regeln direkt im Model definiert werden können. Somit muss eine spätere Änderung auch bloss dort gemacht werden.
Es werden viele Validierungs-Regeln angeboten, wie Required, DataType, Display, StringLength usw.
Die Regeln werden immer in [] vor der Eigenschaft definiert. So könnte es z.B. beim Albumtitel aussehen:

[Required]
[StringLength(100, ErrorMessage = "Error", MinimumLength = 2]
public string Titel { get; set;}

Mehr über MVC - Nützliche Tutorials

MVC ist ein riesiges Gebiet und bietet unglaublich viele Möglichkeiten.
Um mehr über MVC 3 zu erfahren besuchen sie folgende Websites:
http://www.asp.net/mvc/mvc3
http://www.asp.net/mvc/overview/getting-started
Ich selbst habe bisher 2 Tutorials gemacht, welche beide sehr nützlich sind.
Hier wird eine Film-Sammlung Programmiert:
http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs
Hier wird ein MusicStore Programmiert:
http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1
Das 2. Tutorial finde ich wirklich super, da alles von Grund auf neu gemacht wird und nicht wie im 1. Bereits mit vorhandenem gearbeitet wird.