Riassunti
Appunti universitari in formato Markdown da Obsidian.
Il pattern MVC è l'architettura standard per separare la logica di business dall'interfaccia utente nelle applicazioni web. Dividere un'app in queste tre componenti facilita la manutenibilità e il lavoro di squadra.
Le Componenti
Model (Il Dato)
Rappresenta lo stato dell'applicazione e le regole di business. In Java, è solitamente composto da POJO (Plain Old Java Objects) o JavaBeans. Non ha idea di come i dati verranno visualizzati.
View (La Presentazione)
È l'interfaccia che l'utente vede. In ambito Java Web, sono le pagine JSP o template (es. Thymeleaf). La View riceve i dati dal Model tramite il Controller e li visualizza. Non dovrebbe contenere logica complessa.
Controller (Il Regista)
Gestisce le richieste HTTP in entrata.
- Riceve la richiesta dal client (es. tramite una Servlet).
- Interagisce con il Model per recuperare o salvare dati.
- Decide quale View mostrare e gliela "passa" insieme ai dati.
Flusso di Lavoro (Scenario Tipico)
- Richiesta: L'utente invia un form o clicca un link.
- Controller: Una Servlet intercetta la richiesta, valida i parametri e chiama un servizio (Model).
- Model: Esegue il calcolo o interroga il database e restituisce un oggetto (es.
Utente). - Inoltro: Il Controller salva l'oggetto
Utentenelrequest scopee inoltra la richiesta alla JSP. -
View: La JSP legge l'oggetto dal
requeste genera l'HTML finale.Esempio di Controller (Servlet)
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. Logica di business (Model) String operazione = request.getParameter("op"); DatoRisultato dati = MioService.calcola(operazione); // 2. Salvataggio dati per la View request.setAttribute("risultato", dati); // 3. Selezione della View (Forward) String view = "/risultato.jsp"; if (dati == null) view = "/errore.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(view); dispatcher.forward(request, response); }Vantaggi di MVC
- Separazione delle responsabilità: Se voglio cambiare il database, tocco solo il Model. Se voglio cambiare il look, tocco solo la View.
- Supporto a più interfacce: Posso usare lo stesso Model per servire una pagina HTML (View JSP) o una risposta JSON per un'App Mobile.
- Testabilità: È molto più semplice testare la logica nel Model se non è mescolata ai tag HTML.