Model View Controller

Il Model View Controller (o MVC) è un pattern architetturale molto diffuso nello sviluppo di sistemi software e in particolare di quelli facenti uso della programmazione orientata agli oggetti. Il pattern permette di eseguire lo sviluppo di un software suddividendolo in tre elementi distinti:

  • Modello, fornisce i metodi utili ad accedere ai dati, ad esempio interfacciandosi con un database;
  • Vista, rappresenta visivamente i dati contenuti nel model e si occupa dell’interazione con l’utente;
  • Controller, riceve i comandi dell’utente dalla vista e li attua modificando lo stato degli altri componenti.

Questa metodologia di sviluppo facilita il riuso delle singoli componenti sviluppate, sarà ad esempio possibile utilizzare la medesima interfaccia, o il medesimo model in due contesti differenti.

Esempio di interazione tra le componenti del MVC:

  1. L’utente esegue una certa operazione adoperando gli strumenti forniti dalla vista, ad esempio premendo un pulsante o muovendo una scroll bar. La vista comunica l’evento appena verificato al controller (l’utente ha premuto il pulsante “accetto”);
  2. Il controller riceve l’evento dalla vista, lo elabora e successivamente cambia il valore di uno specifico stato memorizzato nel model;
  3. Successivamente il controller istruisce la vista sulle azioni da intraprendere (muovi un certo blocco in una nuova posizione, eccetera).

Un altro tipo di interazione può coinvolgere solamente la vista e il model:

  1. Il controller comunica alla vista di aver cambiato il proprio valore, la vista può a questo punto interrogare il controller oppure ignorare la segnalazione. Questo processo è utile nei casi in cui ad uno stesso model sono collegate diverse viste;
  2. La vista può richiedere al model una verifica del suo stato.

Il pattern MVC può inglobare il funzionamento di altri pattern, tra questi:

  • Observer, per permettere ai model di aggiornare tutte le viste collegate;
  • Composite, una stessa vista può essere composta da più elementi diversi;
  • Strategy, un controller può disporre di numero variabile di viste. Inoltre una stessa vista può venir condivisa tra diversi controller e diverse viste. Questo permette una buona fattorizzazione del codice.