In MVC, un singolo controller può avere più metodi di azione. Ogni azione gestisce una richiesta diversa e genera una risposta diversa. Il raggruppamento di più azioni in un controller è in qualche modo arbitrario, ma di solito viene utilizzato per raggruppare azioni relative a un'entità specifica, come ad esempio gli elementi di una lista di cose da fare.
Controller MVC e Razor Pages
Una versione più completa del controller mostrato nella lezione precedente, potrebbe includere metodi di azione per elencare tutti gli elementi delle cose da fare (per crearne di nuovi e per eliminarli, ad esempio). Purtroppo, spesso si verifica che i controller diventino molto grandi e ingombranti, con molte dipendenze. Un altro problema dei controller MVC è il modo in cui sono organizzati tradizionalmente nel progetto. La maggior parte dei metodi di azione in un controller avrà bisogno di una vista Razor associata e di un modello di vista per passare i dati alla vista. L'approccio MVC tradizionalmente raggruppa le classi per tipo (controller, vista, modello di vista), mentre l'approccio Razor Page raggruppa per funzione, cioè tutto ciò che è correlato a una pagina specifica è collocato insieme.
Si può pensare a ciascuna Razor Page come a un mini controller focalizzato su una singola pagina. Gli handler di pagina sono equivalenti in termini di funzionalità ai metodi di azione del controller MVC. Questa organizzazione ha anche il vantaggio di rendere ciascuna pagina una classe separata, a differenza dell'approccio MVC in cui ogni pagina è un'azione su un determinato controller. Ogni Razor Page è coesa per una particolare funzionalità, come ad esempio la visualizzazione di un elemento della lista delle cose da fare.
I controller MVC invece contengono metodi di azione che gestiscono diverse funzionalità diverse per un concetto più astratto, come ad esempio tutte le funzionalità relative alle cose da fare. I vantaggi nell'utilizzare le Razor Pages sono particolarmente evidenti quando si hanno siti Web "statici", come ad esempio siti di marketing, dove si visualizzano principalmente dati statici e non c'è una vera e propria logica.
Struttura delle directory di un progetto ASP.NET
In basso vediamo la struttura delle directory di un progetto ASP.NET Core che usa le Razor Pages:
.
└── Progetto/
├── Pages/
│ ├── ToDo/
│ │ ├── Category.cshtml
│ │ └── Category.cshtml.cs
│ └── Hello/
│ ├── Welcome.cshtml
│ └── Welcome.cshtml.cs
└── ...
Adesso, invece, mostriamo la struttura di un progetto ASP.NET Core che usa il pattern MVC:
.
└── Progetto/
├── Controllers/
│ └── ToDoController.cs
├── View Models/
│ ├── CategoryViewModel.cs
│ └── CategoryIndexModel.cs
├── Views/
│ └── ToDo/
│ ├── Category.cshtml
│ └── Index.cshtml
│ └── Shared/
└── ...
Controllers
Questa cartella contiene i controller dell'applicazione, che sono responsabili della gestione delle richieste HTTP, dell'elaborazione della logica dell'applicazione e della restituzione delle risposte appropriate. In questo caso, c'è un file chiamato ToDoController.cs
che è il controller per la gestione delle operazioni relative alle attività da fare (ToDo).
View Models
Questa cartella contiene le classi dei view models dell'applicazione, che sono utilizzate per trasportare i dati tra il controller e la vista. In questo caso, ci sono due file chiamati CategoryViewModel.cs
e CategoryIndexModel.cs
che sono utilizzati per rappresentare i dati relativi alle categorie all'interno dell'applicazione.
Views
Questa cartella contiene le viste dell'applicazione, che sono responsabili della presentazione dei dati all'utente. In questo caso, ci sono due cartelle all'interno di Views/
: ToDo/
e Shared/
. La cartella ToDo/
contiene due file di vista chiamati Category.cshtml
e Index.cshtml
che potrebbero essere utilizzati per visualizzare i dati relativi alle categorie e agli elementi di ToDo. La cartella Shared/
potrebbe contenere le viste condivise tra più controller.
Conclusioni
In conclusione, MCV di ASP.NET Core è un framework potente per lo sviluppo di applicazioni Web. Grazie alla sua architettura modulare e flessibile, consente di separare la logica di business dalla presentazione e dalla gestione delle richieste. L'utilizzo di MCV consente di sviluppare applicazioni Web scalabili, testabili e manutenibili.
ASP.NET Core MVC è una scelta ideale quando si necessita di un controllo fine-grained sulla logica di routing, e si vuole separare chiaramente il modello, la vista e il controller nelle applicazioni Web. È adatto per progetti complessi e scalabili con requisiti avanzati di personalizzazione e gestione delle richieste. D'altra parte, Razor Pages è più semplice e adatto per progetti più piccoli o per sviluppatori che preferiscono un approccio più "pagine-centrico" invece di un approccio basato su controller. È particolarmente adatto per la creazione rapida di pagine Web con logica di backend, ed è una scelta comune per applicazioni CRUD (Create, Read, Update, Delete) e pagine di contenuti statici.