6 Stimmen

Sollte Ansicht Modelle in ASP.Net MVC alle Zeichenfolgen sein?

Ich habe den Punkt (unbeabsichtigt), dass ich das Gefühl, in einigen Teilen ich zu viel innerhalb der Ansicht (.aspx) selbst, zu viel Formatierung, Verkettung, an einem Ort ein wenig Regex ersetzen.

Ich habe mit der Arbeit an einem neuen Teil begonnen und versucht, meinen Ansatz zu verbessern Dann kam mir der Gedanke, warum ich nicht einfach alle meine View Models (in /Models/ im .Web-Projekt) zu Strings oder einer Liste von Strings auf einmal mache. Hinweis: Ich beziehe mich nicht auf mein Modell/Domäne, sondern speziell auf mein ViewModel.

public class FinanceQuoteView
{
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase();
    public string Monthly; // rather than Monthly.ToString("C")
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString();
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No";
    public string[] Restrictions;
}

Für die Übermittlung von Formularen (Hinzufügen von Bearbeitungen) verwende ich ein separates Ansichtsmodell, um die Controller-Aktion zu füttern (Formularmodell, wenn Sie wollen, in /Models/Form). So FinanceQuoteForm enthält Doppel usw... über einen Binder gebaut.

Was halten Sie von diesem Ansatz? Ist das .ToString("C") in der Zuordnung von Domäne zu Ansichtsmodell zu viel?

2voto

cjk Punkte 44394

Ihr Modell sollte die korrekten Daten erzeugen, dann liegt es an der Ansicht, die Daten in dem erforderlichen Format zu erzeugen. Wenn Sie eine andere Ansicht auf dem Modell aufbauen, möchten Sie vielleicht verschiedene Manipulationen an den Daten vornehmen, daher schlage ich vor NICHT die sie als Zeichenketten aus dem Modell zurückgeben.

2voto

Mark Seemann Punkte 216836

Bei den von mir entworfenen Ansichtsmodellen neige ich selbst ziemlich stark zu Strings. Schließlich werden die meisten Daten in der Ansicht in Form von Strings angezeigt. Jedes Mal, wenn ich eine Datenmanipulation in der View (.aspx/.ascx) durchführen möchte, ziehe ich ernsthaft in Erwägung, diese Logik in mein View Model zu verlagern, damit ich sie einem Unit-Test unterziehen kann. Schließlich ist Testbarkeit das Haupt Vorteile von MVC, warum sollten Sie es also nicht nutzen?

In WPF (nur um einen kurzen Umweg zu nehmen) viele der Steuerelemente nativ verstehen andere Arten von Daten (wie Zahlen, Boolesche und so weiter), aber auf einer Plattform so inhärent auf Zeichenfolgen als HTML gebunden, macht es eine Menge Sinn für mich, die meisten der Ausgabe als Text zu behandeln.

Alle Daten, die zwischen Server und Browser ausgetauscht werden, sind ohnehin in Form von Strings kodiert, so dass man sie oft nur explizit angeben muss.

Ich denke nicht, dass es zu viel ist - ich denke nur, dass man es zu wenig tun kann :)

1voto

Chalky Punkte 1544

Stimme größtenteils zu. Für traditionelle Bearbeitungsformulare bevorzuge ich getrennte Modelle für das "Post-Modell" (das an den Controller übergeben wird) und für das "View-Modell" für die Ansicht/Bearbeitung (das an die Ansicht übergeben wird).

Die Eigenschaften des Postmodells sind alle Strings. So kann ich feststellen, ob ein Feld in den Beitrag aufgenommen wurde, manche sind es nicht, was für meine Anwendung sehr wichtig ist.

Das Post-Modell füttert meine Controller-Aktion, die dann bestimmt, welche(r) Befehl(e) ausgeführt werden soll(en).

Wenn die Controller-Aktion dazu führt, dass die Ansicht/Bearbeitungsseite angezeigt wird, konstruiere ich das Ansichtsmodell entsprechend und übergebe es an die Ansicht.

Daher kann ich die Eigenschaften meines Ansichtsmodells so gestalten, wie ich es möchte. Sie müssen nicht mit den Typen des Post-Modells übereinstimmen.

Super sauber, und ich habe die volle Kontrolle über alles.

0voto

Mathias F Punkte 15112

Ihre Situation scheint sehr speziell und in gewisser Weise begrenzt zu sein: Dein ViewModel ist entweder zum Bearbeiten oder zum Anzeigen. Die meisten Views machen beides: Sie haben eine Menge Anzeige- und einige Bearbeitungsfunktionen. Sagen wir diese Seite:

Fragen, Antworten und Notizen anzeigen. Bearbeiten: Antwort.

Ich würde nicht zwischen den beiden unterscheiden wollen, denn das würde dazu führen, dass viele Anzeigefelder doppelt vorhanden wären.

Ich würde lieber eine Ansicht mit möglicherweise 2 Eigenschaften haben: eine für die Anzeige und eine für den Formularwert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X