Model-view-controller

Model-view-controller (MVC, talvolta tradotto in italiano con la dicitura modello-vista-controllo), in informatica, è 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…

Model-view-controller (MVC, talvolta tradotto in italiano con la dicitura modello-vista-controllo), in informatica, è 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. Questo pattern si posiziona nel livello logico o di business e di presentazione in una architettura multi-tier.

Componenti

Il componente centrale del MVC, il modello, cattura il comportamento dell'applicazione in termini di dominio del problema, indipendentemente dall'interfaccia utente (view).

Il modello gestisce direttamente i dati, la logica e le regole dell'applicazione. Una vista può essere una qualsiasi rappresentazione in output di informazioni, come un grafico o un diagramma. Sono possibili viste multiple delle stesse informazioni, come ad esempio un grafico a barre per la gestione e la vista tabellare per l'amministrazione. La terza parte, il controller, accetta l'input e lo converte in comandi per il modello e/o la vista.

Struttura

Il pattern è basato sulla separazione dei compiti fra i componenti software che interpretano tre ruoli principali:

il model fornisce i metodi per accedere ai dati utili all'applicazione;

la view visualizza i dati contenuti nel model e si occupa dell'interazione con utenti e agenti;

il controller riceve i comandi dell'utente (in genere attraverso la view) e li attua modificando lo stato degli altri due componenti.

Questo schema, fra l'altro, implica anche la tradizionale separazione fra la logica applicativa (in questo contesto spesso chiamata "logica di business"), a carico del controller e del model, e l'interfaccia utente a carico della view.

I dettagli delle interazioni fra questi tre oggetti software dipendono molto dalle tecnologie usate (linguaggio di programmazione, eventuali librerie, middleware e via dicendo) e dal tipo di applicazione (per esempio se si tratta di un'applicazione web, o di un'applicazione desktop). Quasi sempre la relazione fra view e model è descrivibile anche come istanza del pattern Observer. A volte, quando è necessario cambiare il comportamento standard dell'applicazione a seconda delle circostanze, il controller implementa anche il pattern Strategy.

Utilizzo

Storicamente il pattern MVC è stato implementato lato server. Recentemente, con lo sviluppo e la parziale standardizzazione di JavaScript sono nate le prime implementazioni lato client.

Lato server

Originariamente impiegato dal linguaggio Smalltalk, il pattern è stato esplicitamente o implicitamente sposato da numerose tecnologie moderne, come framework basati su PHP (Symfony, Laravel, Zend Framework, CakePHP, Yii framework, CodeIgniter), su Ruby (Ruby on Rails), su Python (Django, TurboGears, Pylons, Web2py, Zope), su Java (Spring, JSF e Struts), su Objective C o su .NET.

A causa della crescente diffusione di tecnologie basate su MVC nel contesto di framework o piattaforma middleware per applicazioni web, l'espressione framework MVC o sistema MVC sta entrando nell'uso anche per indicare specificamente questa categoria di sistemi (che comprende per esempio Ruby on Rails, Struts, Spring, Tapestry e Catalyst).

Lato client

Negli ultimi anni è aumentata la richiesta di Rich Internet application che facciano chiamate asincrone al server (AJAX), senza fare redirect per visualizzare i risultati delle elaborazioni. Col crescere della quantità di codice JavaScript eseguito sul client, si è sentita l'esigenza di creare i primi framework che implementassero MVC in puro JavaScript. Uno dei primi è stato Backbone.js, seguito da una serie interminabile di altri framework, tra cui JavaScriptMVC, Ember ed AngularJS.

Esempio

In J2EE un esempio tipico è quello della suddivisione dell'applicazione in JSP (per il front-end o view), Servlet per il controller e un File Java per la logica di business di interfacciamento o model con un DB. Quando ciò non è presente un framework MVC sta implementando la stessa logica/schema semplificando il tutto.

Servizi correlati

Altre voci

A

Application service provider

L'application service provider (ASP) è un modello architetturale per l'erogazione di servizi informatici che prevede una spinta remotizzazione elaborativa ed applicativa. Spesso il termine è usato indicando l'erogazione di servizi informatici in "modalità ASP".

Leggi la voce →
SQL injectionS

SQL injection

Nella sicurezza informatica SQL injection è una tecnica di command injection, usata per attaccare applicazioni che gestiscono dati attraverso database relazionali sfruttando il linguaggio SQL. Il mancato controllo dell'input dell'utente permette di inserire artificiosamente delle stringhe di…

Leggi la voce →
Cassandra (database)C

Cassandra (database)

Cassandra è un database management system non relazionale distribuito con licenza open source e ottimizzato per la gestione di grandi quantità di dati.

Leggi la voce →
F

Fidelizzazione

La fidelizzazione indica l'insieme delle azioni di marketing volte al mantenimento della clientela già esistente e si realizza principalmente attraverso una serie di strategie consone a creare il più elevato grado di soddisfazione del cliente.

Leggi la voce →
Programmazione (informatica)P

Programmazione (informatica)

La programmazione è il processo di ideazione, progettazione e costruzione di programmi informatici eseguibili volti generalmente alla risoluzione di problemi o allo svolgimento di computazioni. La programmazione è costituita da fasi come l'analisi e la generazione di algoritmi, lo studio della…

Leggi la voce →
T

Tipizzazione statica

Nella teoria dei linguaggi di programmazione, la tipizzazione statica identifica una categoria di sistemi di tipi dove la verifica della compatibilità delle operazioni e l'assegnazione dei tipi a variabili, espressioni e funzioni avvengono già prima dell'esecuzione del programma, generalmente…

Leggi la voce →