2011-01-17 17 views
6

Ho appena pensato al concetto di oggetto del modello di vista che creiamo in asp.net MVC. Il nostro scopo è quello di istanziarlo e passarlo dal controller per visualizzare e visualizzare leggerlo e visualizzare i dati.Asp .Net MVC Viewmodel dovrebbe essere di classe o struct?

Questi modelli di viste vengono di solito istanziati tramite il costruttore. Non avremo bisogno di inizializzare i membri, potremmo non aver bisogno di ridefinire/sovrascrivere il costruttore senza parametri e non abbiamo bisogno di funzionalità di ereditarietà.

Quindi, perché non usiamo il tipo struct per il nostro modello di vista invece della classe. Migliorerà le prestazioni.

risposta

13

Prendi "aumenterà le prestazioni" come un dato, ma ne sei veramente sicuro? Le strutture hanno prestazioni migliori delle classi in circostanze specifiche. Sto generalizzando per semplicità, ma gli scenari sono principalmente:

  • Sono immutabili.
  • Sono piccoli, ad es. di solito non più di 3 - 4 campi.
  • Stai generando tonnellate (spesso milioni o più) di loro in un intervallo di tempo estremamente breve.
  • Stai lavorando con loro in loop stretti.
  • I percorsi di codice che attraversano sono ottimizzati per quelle strutture specifiche e non eseguono operazioni di boxing/unboxing.

Ce ne sono altri, ma questo è fuori di testa. E anche allora, stiamo parlando di guadagni di prestazioni spesso minuscole. Come in microsecondi minuscolo.

Anche se è possibile garantire che i modelli di visualizzazione siano immutabili e piccoli, le altre condizioni non vengono mantenute. Supponendo un modello di visualizzazione per richiesta, il tuo server web non gestirà milioni di richieste al secondo. Inoltre, il framework MVC non funziona con questi in cicli stretti e non contiene percorsi di codice ottimizzati per questa particolare struttura. Di conseguenza, il framework MVC finirà per eseguire tonnellate di operazioni di boxing/unboxing sui tipi di valore.

Bottom line: non ottimizzare o eseguire l'over-engineer della soluzione. Le lezioni vanno bene. E per quanto riguarda l'ottimizzazione, lo misura sempre per assicurarti di dedicare il tuo tempo a una valida impresa. Non preoccuparti di banalità quando ci sono pesci più grandi da friggere.

+0

Grazie mille per il vostro tempo e una spiegazione approfondita, Levi. I tuoi pensieri rendono la mia giornata. –

+2

Inoltre, una struttura viene passata attraverso lo stack (ulteriori informazioni da trasferire) e la classe viene passata attraverso l'heap tramite un puntatore (meno informazioni da trasferire). So che è una vecchia domanda, ma i nuovi visitatori meritano di saperne di più. –

0

utilizzare una classe. alcuni modelli di vista richiedono costruttori, convertitori e forse più funzionalità, perché limitare a struct? (come se tu avessi oggetti EF4 e devi farne POCO fuori da loro ...)

Problemi correlati