Model-view-controller: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pil56-bot (discussione | contributi)
smistamento lavoro sporco
Vitalij zad (discussione | contributi)
Aggiunta di molti riferimenti a siti esterni ed aggiornamento dei contenuti, principalmente introduzione dell'MVC lato client
Riga 3:
[[File:ModelViewControllerDiagram2.svg|thumb|300px|Struttura del pattern MVC]]
 
Il '''Model-View-Controller''' ('''MVC''', talvolta tradotto in italiano '''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]], in grado di separare la logica di presentazione dei dati dalla [[business logic|logica di business]].<ref>Per una introduzione di tipo universitario, consultare [http://www.dia.uniroma3.it/~pizzonia/swe/slides/12_MVC.pdf queste slides]. Per avere una introduzione al pattern MVC in un'ottica Java, vedere [http://www.mokabyte.it/2003/01/pattern_mvc.htm questo articolo] su Mokabyte, per avere una introduzione in ottica Microsoft, vedere [http://msdn.microsoft.com/en-us/library/ff649643.aspx questo articolo] su MSDN.</ref>
 
Questo pattern si posiziona nel livello di presentazione in una [[Architettura multi-tier]].
 
== 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]</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]], [[Zend Framework]], [[CakePHP]], [[Yii framework]], [[CodeIgniter]]), 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]].
 
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 ===
Recentemente è 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 del codice JavaScript che veniva eseguito sul client, si è sentita l'esigenza di creare i primi framework che implementino MVC in puro JavaScript. Uno dei primi è stato Backbone.js, seguito da una serie interminabile di altri framework, tra cui JavascriptMVC ed AngularJS.
 
== Struttura ==
Line 18 ⟶ 28:
* il '''controller''' riceve i comandi dell'utente (in genere attraverso il 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 del ''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]].
 
== Note ==
<references/>
 
== Voci correlate ==