visual - Perché Razor Pages è l'approccio consigliato per creare un'interfaccia utente Web in Asp.net Core 2.0?




razor pages tutorial (3)

Imparare cose nuove richiede un investimento di tempo, spazio ed energia. Sto attualmente imparando Asp.Net Core MVC 2.0. Questa panoramica delle esercitazioni di ASP.NET Core indica:

Razor Pages è l'approccio consigliato per creare un'interfaccia utente Web con ASP.NET Core 2.0.

Questa informazione mi ha confuso nel decidere se devo smettere di imparare Asp.net Core MVC e iniziare ad imparare Asp.net Core Razor Pages.

  • Perché Razor Pages è l'approccio consigliato per creare un'interfaccia utente Web in Asp.net Core 2.0?

Tutte le indicazioni sono ben accette


Da "Architecting modern web applications with asp.net core" ( pdf qui ):

MVC : Usando i controller e le viste, era normale che le applicazioni avessero controller molto grandi che funzionavano con molte dipendenze e modelli di visualizzazione diversi e restituivano molte viste differenti. Ciò ha comportato molta complessità e spesso ha portato a controllori che non seguivano efficacemente il Open/Closed Principles Single Responsibility Principle o Single Responsibility Principle Open/Closed Principles .

Razor Pages risolve questo problema incapsulando la logica lato server per una determinata "pagina" logica in un'applicazione web. Una pagina del rasoio che non ha una logica lato server può semplicemente consistere in un file Razor (ad esempio "Index.cshtml"). Tuttavia, la maggior parte delle pagine Razor non banali avrà una classe modello di pagina associata, che per convenzione è denominata come il file Razor con estensione ".cs" (ad esempio, "Index.cshtml.cs"). Questa classe di modello di pagina combina le responsabilità di un Controller e di un ViewModel. Invece di gestire le richieste con i metodi di azione del controller, i gestori di modelli di pagina come "OnGet ()" vengono eseguiti, visualizzando la pagina associata per impostazione predefinita.

Le pagine del rasoio semplificano il processo di creazione di singole pagine in un'app di ASP.NET Core, pur continuando a fornire tutte le funzionalità architetturali di ASP.NET Core MVC. Sono una buona scelta di default per le nuove funzionalità basate su pagine (le pagine Razor offrono un modo significativamente più semplice di creare funzionalità di applicazione basate sulla pagina, come i moduli non SPA).

Quando utilizzare MVC :

Se stai creando API web, lo schema MVC ha più senso che provare a utilizzare Razor Pages. Se il tuo progetto esporrà solo endpoint dell'API Web, dovresti idealmente partire dal modello di progetto dell'API Web, ma altrimenti è facile aggiungere controller e endpoint API associati a qualsiasi app ASP.NET Core. Dovresti inoltre utilizzare l'approccio MVC basato su visualizzazione se stai eseguendo la migrazione di un'applicazione esistente da ASP.NET MVC 5 o precedente a ASP.NET Core MVC e desideri farlo con il minimo sforzo. Una volta effettuata la migrazione iniziale, è possibile valutare se sia sensato adottare Razor Pages per nuove funzionalità o anche come migrazione all'ingrosso.

Nota: Sia che tu scelga di costruire la tua app Web utilizzando le pagine Razor Pages o MVC, la tua app avrà prestazioni simili e includerà il supporto per l'integrazione delle dipendenze, filtri, associazione modello, convalida, ecc.

Aggiornamento: alcuni altri motivi che ho letto su questo problema github commentato da scott sauber :

Utilizziamo Razor Pages per un portale di assicurazione sanitaria multi-tenant in cui gli amministratori delle risorse umane possono CRUD sui dati dei dipendenti, eseguire rapporti, caricare documenti, scaricare documenti, dichiarazioni di fatturazione, ecc. Ei dipendenti che sono assicurati possono vedere i dettagli sulla loro assicurazione sanitaria , cambialo, scarica documenti, ecc.

Abbiamo oltre 60 pagine e posso dire che per HTML reso dal server , non tornerò mai su MVC. È semplicemente la soluzione migliore per le app HTML rese dal server. Non è solo per le cose semplici. Il settore dell'assicurazione sanitaria è intrinsecamente complesso e si combina con il fatto che si tratta di un'app multi-tenant (vendiamo il prodotto ad altre compagnie assicurative), che aggiunge più complessità in quanto l'app è altamente configurabile in quanto le compagnie assicurative fanno cose un po 'diversamente .

Perché usarlo?

  • Razor Pages è più sicuro di default. Razor Pages ti dà la convalida AntiForgeryToken per impostazione predefinita. Inoltre, attivi le proprietà che desideri associare al modello tramite [BindProperty] che limita la tua esposizione agli attacchi di over-posting.

  • Pagine del rasoio ha una struttura di cartelle migliore per impostazione predefinita che si adatta meglio. In MVC, la struttura di cartelle predefinita semplicemente non scala. Avere cartelle separate per Views, Controllers e spesso ViewModels quando tutti e tre sono alla fine strettamente accoppiati tra loro è un enorme PITA con cui lavorare. Finisci per rimbalzare su tutte e 3 le cartelle e navigare in gruppo ogni volta che devi aggiungere o modificare una funzionalità. È orribile. Questo è il motivo per cui ho sostenuto per Feature Folders. Con Razor Pages, il tuo PageModel (Controller + ViewModel) si trovano nella stessa cartella della tua vista. Puoi semplicemente premere F7 per passare da uno all'altro, il che è anche super conveniente.

  • Porta a un codice più gestibile che si adatta meglio. Con MVC è stato super facile gonfiare un controller con 10+ azioni. Spesso, queste azioni non erano nemmeno collegate l'una con l'altra in alcun modo (tranne forse un reindirizzamento tra i due). Ciò ha reso molto difficile la navigazione del Controller per trovare il codice. È peggiorato se ci fossero anche metodi privati ​​nel Controller, aggiungendo ulteriore importanza al metodo. Con Razor Pages, è quasi impossibile ingrandire il tuo modello di pagina con metodi non correlati alla tua pagina. Tutto ciò che inserisci nel tuo PageModel è correlato alla tua Pagina.

  • Il test unitario è più facile. Con un controller, potresti avere 8 azioni e alcune delle tue dipendenze da iniettare erano solo relative a una o due azioni. Quindi, quando l'unità sta testando una singola Azione, è necessario deriderla inutilmente o passare un null, entrambi sono grossolani (questo può essere risolto un po 'con il pattern Builder). Con Razor Pages, le dipendenze in cui ti iniettano sono al 100% correlate alle azioni GET e POST con le quali stai lavorando. Sembra naturale.

  • Il routing è più facile. Di default in Razor Pages, il routing corrisponde semplicemente alla struttura delle cartelle. Questo rende le cartelle di nidificazione più facili da realizzare. Ad esempio, tutte le nostre pagine di amministrazione delle risorse umane si trovano nella cartella /Administrator e tutte le pagine dei dipendenti si trovano nella cartella /Employee . Siamo in grado di autorizzare un'intera cartella e dire che la persona deve essere un amministratore per accedere a qualsiasi sottocartella di /Administrator , il che è stato molto più semplice da fare rispetto a più controllori che costituiscono le funzionalità dell'amministratore.

Penso che siano le grandi cose.

Aggiornamento 2:

Riguarda una certa complessità del pattern MVC, non risponde direttamente alla domanda, ma può essere utile: un manager di ingegneria su Facebook, ha detto ( here ) per il loro "sufficientemente grande" base di codice e una grande organizzazione, "MVC è diventato davvero complicato molto rapidamente" concludendo che MVC non scala. La complessità del sistema è andata esponenziale ogni volta che hanno tentato di aggiungere una nuova funzionalità rendendo il codice "fragile e imprevedibile". Stava diventando un problema serio per gli sviluppatori nuovi a un certo codebase perché avevano paura di toccare il codice per timore che si rompessero qualcosa. Il risultato è stato che MVC stava cadendo a pezzi per Facebook .


Gli sviluppatori erano sul forum nel 2013 chiedendo "Cosa significa Microsoft, Silverlight non è il raccomandato ... ???" Solo che questa volta MVC sarà dichiarato morto e longeve MVVM. E probabilmente puoi aspettarti che MVC venga gettato nel mucchio dei rifiuti, lentamente, ma accelerato tra circa 18 mesi e ogni volta che hai speso l'apprendimento di MVC andrai allo stesso ammasso di scarti. Inoltre, MVVM sembra facile, ma ci vuole un anno per capirlo e farlo davvero bene.


Microsoft sta tornando all'approccio WebForms per semplificare la struttura del progetto affidandosi al mantra "Convenzione sulla configurazione", nascondendo allo stesso tempo la configurazione dallo sviluppatore per rendere le cose più veloci. Ma ha il disavantaggio che tutto sarà nuovamente mescolato. Non sembro una mossa intelligente per l'organizzazione. Ma hey! Qualcosa di nuovo deve attirare l'attenzione dello sviluppatore verso Microsoft.

Se la tua pagina utilizza un'API Web MVC per REStful, è davvero più semplice utilizzare solo le pagine Razor. In caso contrario, ti consigliamo di utilizzare Core MVC.

In progetti enormi, in cui il modello e il controller sono insieme nello stesso file, la manutenzione sarà un incubo. Funziona bene per clases che sono solo 2 proprietà lunghe, ma viola il principio Open Close di OOP. Dovresti progettare e utilizzare un'architettura che possa crescere nel tempo (Extensible) e rimanere stabile e logica (non ristrutturare il progetto), basta estenderla usando lo stesso modello.





razor-pages