Model-view-controller: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
(191 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{F|programmazione|giugno 2012}}
{{stub informatica}}
[[File:ModelViewControllerDiagram2.svg|thumb|upright=1.4|Struttura del pattern MVC]]
'''Model-View-Controller''' ('''MVC''', talvolta tradotto in italiano '''Modello-Vista-Controllore''') è il nome di un [[design pattern]] fondamentale nello sviluppo di [[GUI|interfacce grafiche]] di sistemi [[software]] [[Programmazione orientata agli oggetti|object-oriented]]. Originariamente impiegato dal linguaggio [[Smalltalk]], il pattern è stato esplicitamente o implicitamente sposato da mumerose tecnologie moderne, come [[framework]] basati su [[linguaggio Java|Java]] ([[Swing (Java)|Swing]], [[Java Server Faces|JSF]] e [[Struts]]), su [[Objective C]] o su [[.NET]].
'''Model-view-controller''' ('''MVC''', talvolta tradotto in [[Lingua italiana|italiano]] con la dicitura '''modello-vista-controllo'''), in [[informatica]], è un [[design pattern|pattern architetturale]] molto diffuso nello sviluppo di sistemi [[software]], in particolare nell'ambito della [[programmazione orientata agli oggetti]] e in [[applicazione web|applicazioni web]], in grado di separare la [[Livello di presentazione#Altro|logica di presentazione]] dei dati dalla [[logica di business]].<ref>Per una introduzione di tipo universitario, consultare [http://www.dia.uniroma3.it/~pizzonia/swe/slides/12_MVC.pdf queste slide]. Per avere una introduzione al pattern MVC in un'ottica Java, vedere [http://www.mokabyte.it/2003/01/pattern_mvc.htm questo articolo] {{webarchive|url=https://web.archive.org/web/20121224032208/http://www.mokabyte.it/2003/01/pattern_mvc.htm |data=24 dicembre 2012 }} su Mokabyte, per avere una introduzione in ottica Microsoft, vedere [https://msdn.microsoft.com/en-us/library/ff649643.aspx questo articolo] su MSDN.</ref> Questo pattern si posiziona nel livello logico o di business e di presentazione in una [[architettura multi-tier]].
 
==Soluzione Descrizione ==
=== Componenti ===
La soluzione viene interpretata a modo proprio dagli implementatori, ma in linea generale è questa: l' applicazione deve separare i componenti software che implementano il modello delle funzionalità di business ('''model'''), dai componenti che implementano la logica di presentazione ('''view''') e di controllo che utilizzano tali funzionalità ('''controller''').
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 ===
==Schema di funzionamento==
[[File:MVC-Process.png|miniatura|Tipica interazione tra componenti del pattern MVC]]
Model è il cuore dell'applicazione. Definisce i dati e le operazioni che possono essere eseguiti su essi.
Il pattern è basato sulla separazione dei compiti fra i componenti [[software]] che interpretano tre ruoli principali:
Fornisce delle funzioni per l'accesso e l'aggiornamento.
Può inoltre avere la responsabilità di notificare ai componenti della View eventuali aggiornamenti verificatisi in seguito a richieste del Controller, al fine di permettere alle View di presentare agli occhi degli utenti dati sempre aggiornati.
 
* il ''model'' fornisce i [[metodo (informatica)|metodi]] per accedere ai dati utili all'applicazione;
View è l'interfaccia grafica (GUI) con cui l'utente interagisce.
* 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 "[[Business logic|logica di business]]"), a carico del ''controller'' e del ''model'', e l'interfaccia utente a carico della ''view''.<ref>Vedi l'[http://martinfowler.com/eaaCatalog/modelViewController.html articolo] di Martin Fowler.</ref>
Il controller ha la responsabilità di trasformare le interazioni dell'utente della View in azioni eseguite dal Model. Ma il Controller non rappresenta un semplice "ponte" tra View e Model. Realizzando la mappatura tra input dell'utente e processi eseguiti dal Model e selezionando la schermate della View richieste, il Controller implementa la logica di controllo dell'applicazione.
 
I dettagli delle interazioni fra questi tre oggetti software dipendono molto dalle tecnologie usate ([[linguaggio di programmazione]], eventuali [[libreria software|librerie]], [[middleware]] e via dicendo) e dal tipo di applicazione (per esempio se si tratta di un'[[applicazione web]], o di un'[[Programma (informatica)|applicazione desktop]]). Quasi sempre la relazione fra ''view'' e ''model'' è descrivibile anche come istanza del pattern [[Observer pattern|Observer]]. A volte, quando è necessario cambiare il comportamento standard dell'applicazione a seconda delle circostanze, il ''controller'' implementa anche il pattern [[Strategy pattern|Strategy]].
[[categoria:Pattern]]
 
== Utilizzo ==
[[cs:Model-view-controller]]
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]].<ref>Leggere [http://www.html.it/articoli/javascript-mvc-1/ questa ottima introduzione] {{Webarchive|url=https://web.archive.org/web/20131231001220/http://www.html.it/articoli/javascript-mvc-1/ |date=31 dicembre 2013 }}</ref>
[[de:Model View Controller]]
 
[[en:Model-view-controller]]
=== Lato server ===
[[eo:MVC]]
 
[[es:Modelo Vista Controlador]]
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 (linguaggio di programmazione)|Ruby]] ([[Ruby on Rails]]), su [[Python]] ([[Django (informatica)|Django]], [[TurboGears]], [[Pylons]], [[Web2py]], [[Zope]]), su [[linguaggio Java|Java]] ([[Spring framework|Spring]], [[Java Server Faces|JSF]] e [[Struts]]), su [[Objective C]] o su [[.NET]].
[[fi:MVC-arkkitehtuuri]]
 
[[fr:Modèle-Vue-Contrôleur]]
A causa della crescente diffusione di tecnologie basate su MVC nel contesto di [[framework]] o piattaforma [[middleware]] per [[applicazione web|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]], [[Apache Struts|Struts]], [[Spring framework|Spring]], Tapestry e [[Catalyst (software)|Catalyst]]).
[[he:ארכיטקטורת MVC]]
 
[[ja:MVC]]
=== Lato client ===
[[nl:Model-View-Controller-model]]
[[File:JSP_Model_2.svg|thumb|right|Esempio di schema MVC in [[J2EE]]]]
[[pl:MVC]]
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]].
[[pt:MVC]]
 
[[sv:Model-View-Controller]]
== Esempio ==
[[zh:MVC]]
In [[J2EE]] un esempio tipico è quello della suddivisione dell'applicazione in [[JavaServer Pages|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 [[database|DB]]. Quando ciò non è presente un [[framework]] MVC sta implementando la stessa logica/schema semplificando il tutto.
 
== Note ==
<references/>
 
== Bibliografia ==
 
* {{cita libro
|autore = [[Ian Sommerville]]
|titolo = Ingegneria del software
|url = https://software-engineering-book.com/
|editore = Pearson
|città = Torino
|anno = 2017
|edizione = 10
|ISBN = 9788891902245
|cid = Sommerville 2017
}}
 
== Voci correlate ==
* [[Architettura multi-tier]]
* [[Core Data]]
* [[Design pattern]]
* [[en:Model-view-Front controller]]
* [[Programmazione orientata agli oggetti]]
* [[Servlet]]
* [[cs:Model-view-controllerviewmodel]]
 
== Altri progetti ==
{{interprogetto|preposizione=sul}}
 
== Collegamenti esterni ==
* {{FOLDOC|Model-View-Controller|Model-View-Controller}}
 
{{Design pattern}}
{{stub portale|informatica}}
 
[[Categoria:Architettura del software]]
[[Categoria:Design pattern]]