Framework per applicazioni web: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m smistamento lavoro sporco e fix vari
Riga 1:
Un '''framework per applicazioni web''' (''web application framework''), in [[informatica]] e specialmente nella [[programmazione web]], è un [[framework|framework software]] progettato per supportare lo sviluppo di [[Sito web|siti web]] [[web dinamico|dinamici]], [[applicazione web|applicazioni web]] e [[Web service|servizi web]].
[[File:Pyramid web framework logo on transparent background.png|miniatura|Logo del web framework Pyramid<ref>{{Cita web|url=https://docs.pylonsproject.org/projects/pyramid/en/latest/index.html|titolo=The Pyramid Web Framework — The Pyramid Web Framework v2.0|sito=docs.pylonsproject.org|accesso=2021-08-25 agosto 2021}}</ref>]]
Lo scopo è quello di alleggerire il lavoro associato allo sviluppo delle attività più comuni di un'applicazione web da parte dello [[programmatore|sviluppatore]]. Uno dei principi fondamentali è riassunto dall'acronimo DRY ([[don't repeat yourself]]), nel senso che viene fortemente consigliata l'adozione di tecniche di [[riuso di codice]]. Molti framework forniscono ad esempio delle [[Libreria (software)|librerie]] per l'accesso alle [[basi di dati]], per la creazione di [[template]] [[HTML]] o per gestire la [[sessione]] dell'utente<ref name=":1">{{Cita web|url=https://www.nephila.digital/it/blog/2014/10/03/web-framework-definizione/|titolo=Cos'è un web framework|autore=Laura Bartoli|sito=www.nephila.digital|data=3 ottobre 2014-10-03|lingua=it|accesso=2021-08-25 agosto 2021}}</ref>.
 
Esempi di framework per applicazioni web sono [[Apache Struts]], [[Spring framework|Spring]], [[Swing (Java)|Swing]], [[Java Server Faces]] ([[Oracle Application Development Framework |Oracle ADF]]), [[Symfony]], [[Phalcon]], [[CodeIgniter]], [[Angular]], [[ReactJS]], [[Laravel]]. In grandi organizzazioni come [[banca|banche]] o grandi [[azienda|aziende]] si utilizzano spesso framework proprietari, varianti dei framework in tecnologie note, per aumentare il livello di sicurezza<ref name=":1" />.
 
== Caratteristiche ==
[[File:MiddlewareOnion.svg|alt=Concetto di middleware|miniatura|Concetto di middleware]]
I framework in genere impostano il flusso di controllo di un programma e consentono all'utente del framework di "agganciarsi" a quel flusso esponendo vari eventi<ref name=":002">{{CiteCita web|url=http://martinfowler.com/bliki/InversionOfControl.html|titletitolo=bliki: InversionOfControl|lastcognome=Fowler|firstnome=Martin|websitesito=martinfowler.com|access-dateaccesso=6 marzo 2016-03-06}}</ref>. Questo modello di progettazione "inversione del controllo" è considerato un principio che definisce un framework e avvantaggia il codice imponendo un flusso comune per un team che tutti possono personalizzare in modi simili<ref name=":02">{{Cite web|url=http://martinfowler.com/bliki/InversionOfControl.html|title=bliki: InversionOfControl|last=Fowler|first=Martin|website=martinfowler.com|access-date=2016-03-06}}</ref>. Ad esempio, alcuni popolari "microframework" come Sinatra di Ruby (che ha ispirato Express.js) consentono agganciamenti [[middleware]] prima e dopo le richieste [[Hypertext Transfer Protocol|HTTP]]. Queste funzioni middleware possono essere qualsiasi cosa e consentono all'utente di definire la registrazione, l'autenticazione, la gestione delle sessioni e il [[Redirect|reindirizzamento]]<ref>{{CiteCita web|url=http://www.capitalone.io/blog/successful-framework-philosophies/|titletitolo=Capital One Engineering – Philosophies that Shaped Successful Frameworks|lastcognome=Xue|firstnome=Qiang|websitesito=www.capitalone.io|access-dateaccesso=6 marzo 2016-03-06}}</ref>.
 
== Tipi di architetture framework ==
 
=== [[Model-view-controller]] ===
Molti framework seguono il modello architetturale MVC (Model-view-controller) per separare il modello di dati con regole di business dall'interfaccia utente <ref>{{Cita web|url=http://www.dia.uniroma3.it/~pizzonia/swe/slides/12_MVC.pdf|titolo=pdf}}</ref>.
 
==== Push-based vs. pull-based ====
[[File:Ruby On Rails Logo.svg|alt=Logo di Ruby On Rails|miniatura|Logo di Ruby On Rails ]]
La maggior parte dei framework MVC segue un'architettura basata su push chiamata anche "basata sull'azione". Questi framework utilizzano azioni che eseguono l'elaborazione richiesta e quindi "trasmettono" i dati al livello di visualizzazione per eseguire il rendering dei risultati<ref>{{citecita web|lastcognome=Thomson|firstnome=Kris|titletitolo=Clarification on MVC= Pull and MVC Push|url=https://www.theserverside.com/discussions/thread/22143.html|datedata=2003-10-29 ottobre 2003|access-dateaccesso=2007-07-29 luglio 2007}}</ref>. Django, [[Ruby on Rails]], Symfony, Spring MVC, Stripes, Sails.js, CodeIgniter<ref>{{citecita web|url=https://cwiki.apache.org/confluence/display/WW/What+are+the+fundamental+differences+between+Struts+and+JSF|titletitolo=What are the fundamental differences between Struts and JSF|publishereditore=Struts.apache.org|datedata=2011-02-14 febbraio 2011|access-dateaccesso=2013-06-14 giugno 2013}}</ref> sono esempi di questa architettura.
 
=== Organizzazione a tre livelli ===
Nell'organizzazione a tre livelli, le applicazioni sono strutturate su tre livelli fisici: client, applicazione e database<ref>{{citecita web|url=http://msdn.microsoft.com/en-us/library/ff647546.aspx|titletitolo=Three-tiered distribution|authorautore=Microsoft|access-dateaccesso=19 settembre 2011-09-19}}</ref><ref>{{citecita web|url=http://download.oracle.com/docs/cd/E10316_01/cs/cs_doc_10/documentation/integrator/clustering_concepts_10en.pdf|titletitolo=clustering_concepts_10en|authorautore=Oracle|access-dateaccesso=19 settembre 2011-09-19}}</ref><ref>{{citecita web|url=http://www.sis.pitt.edu/~perkoski/is1092/slides/chapter01.ppt|titletitolo=Introduction to Web Development|authorautore=Robert R. Perkoski|archive-urlurlarchivio=https://web.archive.org/web/20131107052241/http://www.sis.pitt.edu/~perkoski/is1092/slides/chapter01.ppt|archive-date=2013-11-07}}</ref><ref>{{citecita web|url=http://publib.boulder.ibm.com/html/as400/v5r1/ic2933/index.htm?info/rzaii/rzaiithreetier.htm|titletitolo=Using Client Access Express in a three tier environment|authorautore=IBM|access-dateaccesso=19 settembre 2011-09-19}}</ref>. Il database è normalmente un RDBMS. L'applicazione contiene la logica di business, gira su un server e comunica con il client tramite HTTP<ref>{{citecita web|url=http://download.oracle.com/docs/cd/B25221_05/web.1013/b13593/undtldev010.htm|titletitolo=Understanding the Three-Tier Architecture|authorautore=Oracle|access-dateaccesso=19 settembre 2011-09-19}}</ref>. Il client sulle applicazioni Web è un browser Web che esegue l'HTML generato dal livello dell'applicazione<ref>{{citecita web|url=http://msdn.microsoft.com/en-us/library/aa905336.aspx|titletitolo=Pragmatic Architecture: Layering|authorautore=Microsoft|access-dateaccesso=19 settembre 2011-09-19}}</ref><ref>{{citecita web|url=http://www.arokiait.com/3-tire-web-architechture.htm|titletitolo=3-Tier Web Architecture|authorautore=Arokia|access-dateaccesso=19 settembre 2011-09-19}}</ref>. Il termine non deve essere confuso con MVC, dove, a differenza dell'architettura a tre livelli, è considerata una buona pratica mantenere la logica di business lontana dal controller, il "livello intermedio"<ref>{{citecita web|url=http://www.arrangeactassert.com/asp-net-mvc-controller-best-practices-–-skinny-controllers/|titletitolo=ASP.NET MVC Controller Best Practices|access-dateaccesso=19 settembre 2011-09-19|url-statusurlmorto=deadsi|archive-urlurlarchivio=https://web.archive.org/web/20111011174215/http://www.arrangeactassert.com:80/asp-net-mvc-controller-best-practices-%E2%80%93-skinny-controllers/|archive-date=2011-10-11}}</ref><ref>{{citecita web|url=http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model|titletitolo=Skinny Controller, Fat Model|authorautore=Jamis Buck|archive-urlurlarchivio=https://web.archive.org/web/20150516021854/http://www.arrangeactassert.com/asp-net-mvc-controller-best-practices-%E2%80%93-skinny-controllers/|archive-date=2015-05-16}}</ref>.
 
== Applicazioni ==
I framework sono costruiti per supportare la costruzione di applicazioni Internet basate su un singolo linguaggio di programmazione, che vanno da strumenti di uso generale come Zend Framework e [[Ruby on Rails]], che aumentano le capacità di un linguaggio specifico, a pacchetti programmabili in linguaggio nativo costruiti intorno un'applicazione utente specifica, come i sistemi di gestione dei contenuti, alcuni strumenti di sviluppo mobile e alcuni strumenti del portale<ref>{{CiteCita news|url=https://www.wired.com/2010/02/get_started_with_web_frameworks/|titletitolo=Getting Started With Web Frameworks|publishereditore=[[Wired Magazine]]|access-dateaccesso=2 aprile 2018-04-02|languagelingua=en}}</ref>.
 
==Voci correlate==
Riga 29:
 
{{Framework per applicazioni web}}
{{Portale|internet|informatica}}
 
== Note ==
<references />
 
[[Categoria:Framework per applicazioni web| ]]