2009-03-25 3 views
2

Ich bin gerade dabei, einige kleine persönliche Websites von WebForms zu MVC zu konvertieren. Mit den vorhandenen Sites ist das Datenbankschema solide, aber ich habe mir nie wirklich die Zeit genommen, um richtige Daten/Geschäftsmodelle/Layer zu erstellen. Die ASPX-Seiten sprachen alle direkt mit der Datenbank und verwendeten eine Vielzahl von Sichten und gespeicherten Prozeduren, die aus praktischen Gründen erstellt wurden. Mit MVC versuche ich jetzt, "es richtig zu machen", wie sie sagen und Dinge wie LINQ to SQL und/oder das Entity Framework verwenden, um ein geeignetes Datenmodell oder Modelle für die Anwendung zu erstellen.Modell-Design-Beratung für ASP.NET MVC

Meine Frage dreht sich darum, welche Ziele ich für den Aufbau von Datenmodellen haben sollte. Ich habe verschiedene patternbezogene Artikel gelesen und mir ist klar, dass die Antwort wahrscheinlich von den Eigenschaften meiner Daten abhängen wird. Aber sollte ich generell versuchen, größere Modelle zu erstellen, die so viel wie möglich von der Datenbank umfassen, so dass es nur eine Möglichkeit gibt, mit einer bestimmten Menge von Tabellen zu interagieren? Oder sollte ich kleinere benutzerdefinierte Modelle für jede MVC View erstellen, die nur die Daten und den Zugriff enthalten, den View benötigt?

+0

Ziemlich interessante Frage wirklich. +1 – User

Antwort

2

Oder sollte ich kleinere benutzerdefinierte Modelle für jede MVC View erstellen, die nur die Daten und den Zugriff enthalten, die View benötigt?

Das wäre wahrscheinlich besser.

Vergessen Sie nicht, Sie können Ihre Modelle in Hierarchien stecken, so dass gemeinsame Eigenschaften wie IDs, Namen, Präferenzen in jedem Modell vorhanden sein können.

Fat erweiterte Modelle könnten besser für Unternehmensanwendungen sein, wo Framework automatisch viele Dinge basierend auf vorinstallierten Benutzereinstellungen, Benutzerrollen, Zugriffsrechte usw. macht. Für ein kleines persönliches Projekt wäre wahrscheinlich besser zu versuchen, Ihre Modelle klein zu halten und sauber. Es ist auch ein Schutz. Wenn Sie keine unnötigen Daten in ein Modell eingeben, stellen Sie sicher, dass Ihre Ansicht nicht versehentlich falsche Einträge anzeigt oder dass das Senden eines Formulars nicht versehentlich einige andere Daten überschreibt.

+0

Ich bin froh, dass dies der Konsens zu sein scheint, weil es die Lösung ist, auf die ich mich stützte. Es gab nur einige Zweifel daran, dass mehr Klassen mehr Komplexität und weniger Wartungsfreundlichkeit bedeuten. –

0

Ich würde für das Modell gehen die tatsächliche Datenlogik in Ihrem aktuellen System darstellt und haben Ihre Controller das Stück des Modells zurück, die die Ansicht muss wie:

Controller:

public ActionResult index() 
{ 
    var ListOfObjects = DataHelper.GetAll(); 
    ViewData.Add(ListOfObjects); 
    return View(); 
} 

public ActionResult ViewObject(int id) 
{ 
    var Object= DataHelper.GetObject(); 
    ViewData.Add(Object); 
    return View(); 
} 

public ActionResult ViewObjectChild(int Objectid, int ChildId) 
{ 
    var Child= DataHelper.GetChildObject(Objectid, ChildId); 
    ViewData.Add(Child); 
    return View(); 
} 

On die Ansicht

/

<% var myListOfObjects = ViewData.Get<IList<Object>>(); %> 

/Viewobject/1/

<% var myobject= ViewData.Get<Object>(); %> 

/ViewChild/1/1/

<% var myChild = ViewData.Get<Child>(); %> 

Hinweis I MVC Contrib verwendet haben Funktionen tippte ich diese sehr empfehlen.

0

Im Allgemeinen haben Sie ein umfassendes Domänenmodell für die Datenbank. Sie können das Domänenmodell in Ihrer Service-Schicht oder den Controller verwenden (ändern/hinzufügen/entfernen/usw.), wenn es sich um eine kleine App handelt.

Für Ihre Ansichten können Sie jedoch Präsentationsobjekte verwenden, um die Wartung der Ansichten zu erleichtern. Diese werden manchmal auch als DTO- oder Ansichtsmodellobjekte bezeichnet. Grundsätzlich erstellen Sie ein Objekt, das alle Daten aus dem Modell enthält, die für das Auffüllen der Ansicht erforderlich sind.

Zum Beispiel:

kann Ihr Modell umfassen:

public class Car() 
{ 
    public string Model; 
} 

public class Driver() 
{ 
    public string Name; 
} 

Sie mögen die Namen und das Modell des Autos den Blick zur Ausgabe und Sie würden sowohl das Auto und Fahrer-Modell-Objekte passieren müssen die Aussicht.

Anstatt die beiden Modell sendet der Ansicht direkt von der Steuerung Objekte, können Sie ein Objekt erstellen, die Sie nur die Daten enthält, müssen:

public class CarAndDriverViewModel() 
{ 
    public string CarMake; 
    public string DriverName; 
} 

Sie dieses Objekt aus den Domaindaten und Passbevölkern würden das zur Aussicht. Und die Aussicht wäre:

model.DriverName + ": " + model.CarMake 

Jetzt müssen Sie sich nicht über Logik verzögertes Laden Probleme oder komplizierte Ansicht Sorge mit Modell Besonderheiten zu behandeln. Es ist mehr Arbeit, diese Ansichtsmodellobjekte zu erstellen, aber sie helfen wirklich dabei, die Ansicht sauber zu halten, und bieten eine einfache Möglichkeit zum Formatieren, bevor Daten an die Ansicht gesendet werden.

Es gibt Projekte und Konventionen, die Sie verwenden können, um die Erstellung der Ansichtsmodelle zu automatisieren, wenn Sie sich diese ansehen möchten. AutoMapper ist ein Beispiel.