In ASP.NET MVC, i modelli di visualizzazione dovrebbero avere un ID?

11

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; }
}
    
posta Lawtonfogle 16.10.2014 - 18:16
fonte

2 risposte

1

L'oggetto ViewModel non è ciò che viene memorizzato in una tabella del database, in generale. Sono i singoli elementi nell'oggetto ViewModel che vengono memorizzati. Ciascuno di questi elementi ha già un ID.

Ad esempio:

public class InvoiceViewModel
{
    public Customer Customer { get; set; }
    public Address BillingAddress { get; set; }
    public Address ShippingAddress { get; set; }
    public List<InvoiceLineItem> Items { get; set; }
}

Poiché non esiste una singola tabella nel database che corrisponda a InvoiceViewModel, non esiste un ID per un oggetto InvoiceViewModel.

Naturalmente, puoi sempre usare InvoiceID come id per questo particolare ViewModel. InvoiceID è a portata di mano, perché è ciò che questo oggetto rappresenta in definitiva. Ma potrei vedere un oggetto ViewModel che non corrisponde ad alcun particolare ID nel database.

    
risposta data 16.10.2014 - 18:54
fonte
-1

Di default dovresti avere un ID in vista anche se non lo stai usando. Crea una colonna nel database denominata id e seleziona la funzione auto increment su di essa in modo da essere ordinata.

    
risposta data 14.01.2015 - 13:38
fonte

Leggi altre domande sui tag