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; }
}
quelle
You have to abandon statelessness.
- Sie haben gerade die Wahl getroffen, MVC sinnlos zu verwenden.Antworten:
Das ViewModel-Objekt wird im Allgemeinen nicht in einer Datenbanktabelle gespeichert. Es sind die einzelnen Elemente im ViewModel-Objekt, die gespeichert werden. Jedes dieser Elemente hat bereits eine ID.
Beispielsweise:
Da die Datenbank keine einzelne Tabelle enthält, die einem InvoiceViewModel entspricht, gibt es keine ID für ein InvoiceViewModel-Objekt.
Natürlich können Sie jederzeit die InvoiceID als ID für dieses bestimmte ViewModel verwenden. InvoiceID ist praktisch, denn genau das repräsentiert dieses Objekt letztendlich. Ich konnte jedoch ein ViewModel-Objekt sehen, das keiner bestimmten ID in der Datenbank entspricht.
quelle
Standardmäßig sollte eine ID angezeigt werden, obwohl Sie sie nicht verwenden. Erstellen Sie eine Spalte in der Datenbank mit dem Namen
id
und markieren Sie dasauto increment
Feature darüber, damit Sie sortiert werden.quelle