Quando si sviluppa un'applicazione ASP.NET MVC che consente di aggiornare il modello, è necessario sapere come prelevare il modello di visualizzazione aggiornato e associarlo al modello che è ora aggiornato. Sembra che ci siano alcuni modi diversi per farlo e mi chiedo se qualcuno di questi non sia corretto MVC (proprio come avere i dati del tuo controller che dovrebbero essere nel modello non è MVC corretto)?
Tutti i modelli di vista hanno un ID: Pro
- Assicurati sempre di poter abbinare al tuo modello.
Contro
- Devi stare molto attento che nessuno degli ID sia stato modificato altrimenti puoi avere utenti che aggiornano le righe a cui non dovrebbero avere accesso.
Solo i modelli con vista minima nuda hanno un ID: Pro
- Molto meno il controllo necessario per evitare che gli utenti aggiornino i dati ai quali non dovrebbero accedere.
Contro
- Molto più difficile tenere traccia dei modelli di visualizzazione che corrispondono a quale modello.
- Devi ancora controllare i pochi modelli di visualizzazione con ID per assicurarti che l'utente non stia aggiornando i dati a cui non dovrebbero avere accesso.
Nessun modello di visualizzazione ha ID:
Pro
- Non è necessario verificare gli ID per gli aggiornamenti.
Contro
- Devi abbandonare l'apolidia.
Quindi ho due domande.
Per prima cosa, c'è una scelta corretta / errata? (In caso contrario, ciò significa che la scelta è una questione di opinione e la mia seconda opinione basata sull'opinione e dovrebbe essere ignorata.)
Secondo, se c'è una scelta corretta / errata, che cos'è?
Per chiarire un commento, sto parlando di un modello di visualizzazione che è un imitatore del tuo oggetto di database.
Pensa questo:
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?
}
non questo:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}