2009-05-07 8 views
0

Ich bin dabei, Teile einer Anwendung zu konvertieren, um ASP.NET MVC aus WebForms zu verwenden. Die Idee ist, dass ich MVC wenn möglich für die Neuentwicklung verwende. Mein Problem ist das:Sind einfache Controller ohne Modelle eine gültige Architektur?

Doing es auf diese Weise bedeutet, dass meine Modelle nicht vollständig in MVC implementiert sind. Angenommen, meine WebForms-Anwendung verfügt über eine robuste Widget-Verwaltungsseite. Ich füge neue Funktionen hinzu, um eine Farbe an ein Widget anzuhängen. Klicken Sie auf ein Widget und Sie gelangen auf eine neue Seite, um eine Farbe auszuwählen, und das ist alles. Ein Feld. Es scheint albern zu sein, ein WidgetColorPreference Model mit zwei Eigenschaften zu erstellen: WidgetID und Color, nur zum Validieren und Speichern.

Also habe ich den Weg der Implementierung eines Service-Namespace mit Methoden wie "SetWidgetColor", akzeptieren eine WidgetID und Color-Parameter gegangen. Meine Controller-Aktion ruft diesen Dienst einfach in meiner Models-Assembly auf.

Meine Frage: Ist das eine gültige Notlösung?

Antwort

4

Sicher. MVC existiert, um einen Überblick über ein Modell zu geben. Wenn es sich bei Ihrer App um eine Ansicht und kein Modell handelt, müssen Sie kein Modell dort erzwingen. Wenn Ihre App komplexer wird und ein offensichtliches Modell entsteht, können Sie sie neu einteilen.

Mit anderen Worten, Sie würden M, V und C nicht für Hello World verwenden. Es wäre streng "V". "C" fügt weitere View-spezifische Smartes hinzu und "M" fügt Business-Logik, Persistenz und Retrieval hinzu.

0

Ich denke, Sie würden ein Widget-Modell verwenden und dann die Einschließen/Ausschließen-Funktionen des Modellbinders verwenden, um nur diese Eigenschaften im Widget-Modell in Ihrer Aktion zu aktualisieren.

public ActionResult UpdateWidgetColor([Bind(Include="Color,ID")]Widget widget) 
{ 

} 

oder etwas ähnliches mit TryUpdateModel

public ActionResult UpdateWidgetColor(int id, string color) 
{ 

    var whitelist = new string[] { "Color" }; 

    Widget widget = db.Widgets.SingleOrDefault(w => w.ID == id); 

    if (widget == null) ...handle missing widget error 

    if (!TryUpdateModel(widget, whitelist)) 
    { 
     ... 
    } 
    else 
    { 

    } 
} 
Verwandte Themen