La scrittura di business logic nella vista (.cshtml) di un'applicazione MVC può influire sulle prestazioni (ad esempio, tempo di caricamento)? È il modo preferibile o ci sono altre buone pratiche?
La scrittura di business logic nella vista (.cshtml) di un'applicazione MVC può influire sulle prestazioni (ad esempio, tempo di caricamento)? È il modo preferibile o ci sono altre buone pratiche?
Scrivere qualsiasi logica in una vista è un pattern anti.
Quando scrivi mvc devi creare un modello che corrisponda al tuo 100% ui. Questo modello sarà separato dal tuo modello di database.
Dovresti utilizzare editortemplated e displaytemplates ogni volta che hai un elenco di qualcosa nel tuo modello. Se hai un elenco di Foo chiamato foos fai un
@Html.EditorFor(m => m.Foos)
Che invocherà il modello di editor per Foo per tutti gli elementi nell'elenco. Se vedi che stai facendo una foreach probabilmente stai facendo qualcosa di sbagliato. Continua questo N livelli di profondità.
Innanzitutto, come già sottolineato da Esben nella sua risposta: non è davvero una buona idea mettere la logica aziendale in una prospettiva, perché va contro il principio di progettazione di un MVC :
La logica aziendale nella vista è una cattiva pratica da evitare.
Ulteriori pensieri
Quando diciamo la logica aziendale, è davvero qualcosa che è correlato al contenuto del modello (ad esempio "superiore alla media", "il più grande", ...) e non solo su come presentare i dati del modello (ad esempio un mappatura tra valori e colori).
Se il modello è gestito in un altro processo di sistema (cshtml in un processo rispetto alla logica del modello e agli accessi db in un altro processo), o se l'accesso alla modellazione implica il coinvolgimento di un altro server, la logica aziendale nella visualizzazione richiederebbe molto altro costose chiamate / richieste API (es. più latenza di rete, più trasferimenti di dati, stessi dati letti più volte), che se la logica necessaria fosse già calcolata all'interno del modello.
Leggi altre domande sui tag html design-patterns asp.net-mvc website-performance