Lecture: https://elearning.unimib.it/mod/kalvidres/view.php?id=1152364

Il Model-View-Controller (MVC) è un pattern architetturale molto diffuso nello sviluppo di sistemi software, in particolare nell’ambito della programmazione orientata agli oggetti e in applicazioni web, in grado di separare la logica di presentazione dei dati dalla logica di business. Partiamo analizzando il pattern architetturale:

Untitled

Dove con le frecce piene si hanno le invocazioni di metodi e con quelle tratteggiate gli eventi. Analizzando meglio le tre componenti si ha che:

  1. Model incapsula lo stato dell’applicazione, risponde alle query di stato, espone le funzionalità dell’applicazione e notifica la vista delle modifiche. In altri termini fornisce i metodi per accedere ai dati utili dell’applicazione. E’ implementato dalle classi che realizzano la logica applicativa, possiamo dire che sia il “backend”
  2. View renderizza il modello, richiede l’aggiornamento dai modelli, invia le operazioni dell’utente al controller e gli permette di selezionare la vista. In altri termini visualizza i dati contenuti nel model e si occupa dell’interazione con utenti e agenti. Presenta lo stato del model all’utente, magari con una GUI
  3. Controller definisce il comportamento dell’applicazione, mappa le azioni dell’utente ad update del Model, seleziona le viste per le risposte. In altri termini riceve i comandi dell’utente (in genere attraverso il View) e li attua modificando lo stato degli altri due componenti. Si ha un Controller per funzionalità. E’ un mediatore tra View e Model

La View raccoglie gli input dell’utente e li inoltra al Controller, che li mappa in operazioni sul Model, che viene modificato. A questo punto il Controller seleziona la nuova View da mostare all’utente, che a sua volta interagisce per avere i dati con il Model. Cambi del model sono notificati alla View per eventuali cambiamenti dei dati.

[ripasso di concetti utili, da pp.84 a 88]

Controller Design

Dal punto di vista del Controller Design si hanno vari design pattern:

View Design