Model-view-controller: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
(96 versioni intermedie di 55 utenti non mostrate)
Riga 1:
{{F|programmazione|giugno 2012}}
{{S|informatica}}
[[File:ModelViewControllerDiagram2.svg|thumb|upright=1.4|Struttura del pattern MVC]]
{{F|informatica|giugno 2012}}
'''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]].
[[File:ModelViewControllerDiagram2.svg|thumb|300px|Struttura del pattern MVC]]
'''Model-View-Controller''' ('''MVC''', talvolta tradotto in italiano '''Modello-Vista-Controllo''') è un [[design pattern|pattern architetturale]] molto diffuso nello sviluppo di [[GUI|interfacce grafiche]] di sistemi [[software]] [[Programmazione orientata agli oggetti|object-oriented]].
 
== Descrizione ==
Originariamente impiegato dal linguaggio [[Smalltalk]], il pattern è stato esplicitamente o implicitamente sposato da numerose tecnologie moderne, come [[framework]] basati su [[PHP]] ([[Symfony]], [[Zend Framework]], [[CakePHP]], [[Yii framework]]), su [[Ruby]] ([[Ruby on Rails]]), su [[Python]] ([[Django web framework|Django]], [[TurboGears]], [[Pylons]], [[Web2py]], [[Zope]]), su [[linguaggio Java|Java]] ([[Swing (Java)|Swing]], [[Java Server Faces|JSF]] e [[Struts]]), su [[Objective C]] o su [[.NET]].
=== 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 ===
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]]).
[[File:MVC-Process.png|miniatura|Tipica interazione tra componenti del pattern MVC]]
 
== Struttura ==
Il pattern è basato sulla separazione dei compiti fra i componenti [[software]] che interpretano tre ruoli principali:
* il '''model''' fornisce i [[metodo|metodi]] per accedere ai dati utili all'applicazione;
* il '''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 il view) e li attua modificando lo stato degli altri due componenti
 
* il ''model'' fornisce i [[metodo (informatica)|metodi]] per accedere ai dati utili all'applicazione;
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 del ''view''.
* 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>
 
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]].
 
== 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]].<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>
 
=== 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 (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]].
 
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]]).
 
=== Lato client ===
[[File:JSP_Model_2.svg|thumb|right|Esempio di schema MVC in [[J2EE]]]]
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 [[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 Multitiermulti-tier]]
* [[Core Data]]
* [[Front ControllerDesign pattern]]
* [[Front controller]]
* [[Programmazione orientata agli oggetti]]
* [[Servlet]]
* [[Model-view-viewmodel]]
 
== Altri progetti ==
[[Categoria:Pattern]]
{{interprogetto|preposizione=sul}}
[[Categoria:Architettura del software]]
 
== Collegamenti esterni ==
[[ar:نمط-عرض-متحكم (إم في سي)]]
[[bg:* {{FOLDOC|Model-View-Controller]]|Model-View-Controller}}
 
[[ca:Model-View-Controller]]
{{Design pattern}}
[[cs:Model-view-controller]]
{{portale|informatica}}
[[de:Model View Controller]]
 
[[en:Model–view–controller]]
[[Categoria:Architettura del software]]
[[eo:Modelo-vidigilo-regilo]]
[[Categoria:Design pattern]]
[[es:Modelo Vista Controlador]]
[[fa:مدل-نما-کنترل‌گر]]
[[fi:MVC-arkkitehtuuri]]
[[fr:Modèle-Vue-Contrôleur]]
[[he:Model View Controller]]
[[hi:मॉडल दृष्टि नियंत्रक]]
[[hr:Model–view–controller]]
[[hu:Modell-nézet-vezérlő]]
[[id:MVC]]
[[ja:Model View Controller]]
[[ko:모델-뷰-컨트롤러]]
[[lv:MVC]]
[[mn:Model View Controller]]
[[nl:Model-view-controller-model]]
[[no:Model–view–controller]]
[[pl:Model-View-Controller]]
[[pt:MVC]]
[[ro:Model-view-controller]]
[[ru:Model-View-Controller]]
[[sv:Model-View-Controller]]
[[ta:மாதிரி-காட்சி-கட்டுப்பாட்டகம்]]
[[th:โมเดล-วิว-คอนโทรลเลอร์]]
[[tr:Model-View-Controller]]
[[uk:Модель-вид-контролер]]
[[vi:MVC]]
[[zh:MVC]]