Wenn Sie eine ASP.NET MVC-Anwendung entwickeln, mit der das Modell aktualisiert werden kann, müssen Sie wissen, wie Sie das aktualisierte Ansichtsmodell verwenden und es wieder mit dem jetzt aktualisierten Modell abgleichen können. Es scheint verschiedene Möglichkeiten zu geben, dies zu tun, und ich frage mich, ob eine davon nicht die richtige MVC ist (ähnlich wie wenn Ihre Controller-Speicherdaten, die im Modell enthalten sein sollten, keine richtige MVC sind).
Alle Ansichtsmodelle haben eine ID: Vorteile
- Stellen Sie immer sicher, dass Sie zu Ihrem Modell passen können.
Nachteile
- Sie müssen wirklich vorsichtig sein, dass keine der IDs geändert wurde. Andernfalls können Benutzer Zeilen aktualisieren, auf die sie keinen Zugriff haben sollten.
Nur die Modelle mit bloßer Mindestansicht haben eine ID: Vorteile
- Es sind weitaus weniger Überprüfungen erforderlich, um zu vermeiden, dass Benutzer Daten aktualisieren, auf die sie nicht zugreifen sollten.
Nachteile
- Es ist weitaus schwieriger zu verfolgen, welche Ansichtsmodelle mit welchem Modell übereinstimmen.
- Sie müssen noch die wenigen Ansichtsmodelle mit IDs überprüfen, um sicherzustellen, dass der Benutzer keine Daten aktualisiert, auf die er keinen Zugriff haben sollte.
Keine Ansichtsmodelle haben ID:
Vorteile
- IDs müssen nicht auf Updates überprüft werden.
Nachteile
- Sie müssen Staatenlosigkeit aufgeben.
Ich habe also zwei Fragen.
Erstens gibt es eine richtige / falsche Wahl? (Wenn nicht, bedeutet dies, dass die Wahl eine Ansichtssache ist und meine zweite Frage meinungsbasiert ist und ignoriert werden sollte.)
Zweitens, wenn es eine richtige / falsche Wahl gibt, welche ist es?
Um einen Kommentar zu verdeutlichen, spreche ich, wenn Sie ein Ansichtsmodell haben, das Ihr Datenbankobjekt nachahmt.
Denken Sie das:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
nicht das:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
You have to abandon statelessness.
- Sie haben gerade die Wahl getroffen, MVC sinnlos zu verwenden.