Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on Rails e AJAX

910 views

Published on

Presentazione della tesi triennale "Tecnologie emergenti per lo sviluppo di web applications:
il caso di Ruby on Rails e AJAX"

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
910
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on Rails e AJAX

  1. 1. UNIVERSITÀ DEGLI STUDI DI MILANO Facoltà di Scienze Matematiche, Fisiche e Naturali Dipartimento di Tecnologie dell’informazione Corso di laurea in Informatica Tecnologie emergenti per lo sviluppo di Web Applications: il caso di Ruby on Rails e AJAX Candidato Relatore David Saitta PROF. Marco Cremonini Anno Accademico 2004/2005
  2. 2. Sviluppo di Web Applications • Framework che implementano • UI Statiche solo alcuni aspetti Le azioni dell’utente non modificano la struttura della pagina corrente • È necessario integrare con altri • Usabilità limitata framework, spesso non progettati per lavorare insieme no drag-n-drop, no feedback immediato, no componenti complessi e interattivi • si perde tempo di sviluppo • Request/Response • Molti framework forniscono Ogni azione dell’utente verso il server funzionalità ma non un percorso (link, invio form) richiede un reload logico e chiaro di utilizzo della pagina
  3. 3. Tecnologie Emergenti AJAX AJAX on Asynchronous Ruby on Rails JavaScript RAILS And XML • Struttura chiara • basato sul pattern Model-View-Controller • UI Interattive • Ogni componente ha un suo posto preciso La pagina si evolve per rispecchiare le azioni dell’utente • Full-stack Framework • Singolo progetto omogeneo, tutti i • Maggiore usabilità componenti interagiscono pienamente tra di loro supporto per il drag-n-drop, effetti grafici, componenti complessi e interattivi • Tempi di sviluppo ridotti • No Refresh • le modifiche vengono propagate subito Per comunicare con il server non • sviluppatori impegnati nel porting di occorre il reload della pagina. applicazioni professionali testimoniano come (Async Request/Response) abbiano scritto meno codice in Rails che per i file di configurazione XML di Java Hibernate/Struts e Tomcat
  4. 4. Ruby on Rails • Ruby • Linguaggio interpretato Object-Oriented stile Smalltalk • Dinamico Ruby on Rails • Estendibile a runtime (reflection/metaprogramming) • Unico linguaggio per tutti i livelli del framework HTTP, RSS, AROM, • SOAP DRY: Don’t Repeat Yourself Apache, WeBrick or Lighttpd Requests • Le definizioni devono essere fatte una Web Server sola volta, in un posto specifico Invokes FastCGI, • tree delle directory standard Forwards mod_ruby or SCGI • XHTML, CSS, JS, “Convention over images, XML Dispatcher Responds Configuration” Displays Handles validations Loads • ridurre la configurazione in favore Action CRUDs Renders View delle convenzioni di comportamento Active Controller Record • personalizzabile: configurare solo Responds Delegates ciò che non è convenzionale Action Data or Queries • es: nel modello classe User è associata Errors WebServices di default alla tabella users Redirects Delivers SQLite, XML Database PostgreSQL, Action MySQL, Oracle, Mailer MSSql, ODBC
  5. 5. [M] Active Record person = Person.new(attrs) • Mapping person.save # INSERT person.name = “David” (Don’t Repeat Yourself) person.save # UPDATE classi (Person) ➟ tabelle (People) person.destroy # DELETE attributi ➟ colonne Project < ActiveRecord::Base • •Associazioni has_many :milestones has_one :project_lead belongs_to :company Relazioni uno-a-uno, uno-a-molti, molti-a-molti • project.has_milestones? Complesse (tree, liste, single-table inheritance) • project.create_project_lead CRUD (Create, Retrieve, Update, Delete) project.company.name • Caching if post.save • Validatori # passed validation else post.errors.count post.errors.on(“title”) Standard, Custom, save/create/update post.errors.each { |e| e } • Callbacks end Post < Active Record::Base has_many :comments Eventi generati prima e dopo save/create/update/destroy def before_destroy comments.destroy_all end end
  6. 6. [M] Active Record Order.hbm.xml JAVA/Hibernate <hibernate-mapping> <class name=quot;models.Orderquot; table=quot;Ordersquot; dynamic-update=quot;truequot; dynamic-insert=quot;falsequot; Order.java discriminator-value=quot;nullquot;> public class Order <id name=quot;idquot; column=quot;idquot; type=quot;java.lang.Longquot; { unsaved-value=quot;nullquot;> private Set items; <generator class=quot;identityquot;/> private String name; </id> private Long id; <set name=quot;itemsquot; lazy=quot;falsequot; inverse=quot;falsequot; cascade=quot;nonequot; sort=quot;unsortedquot;> public Long getId() { return id;} <key column=quot;idquot;/> public void setId(Long id){ this.id = id;} <one-to-many class=quot;models.Itemquot;/> </set> public Set getItems() { return items;} <property name=quot;namequot; type=quot;java.lang.Stringquot; public void setItems(Set items) { this.items = items; } update=quot;truequot; insert=quot;truequot; public String getName() { return name; } access=quot;propertyquot; column=quot;namequot;/> public void setName(String name) { this.name = name; } </class> } </hibernate-mapping> order.rb Rails class Order < ActiveRecord::Base has_many :items end
  7. 7. Action Controller Action Controller [C] Action Controller • Actionsinsteadinstead of object, shared helper methods ctions grouped in controller grouped in controller ction Action as method of object, shared helper methods as method • Rendering • Assigns and codes codes Actions endering def display @customer = display def • @customer = Customer.find(@params[“id”]) Le azioni sono metodi del Controller Customer.find(@params[“id”]) ssigns •and status status end es: in Java/Struts ogni azione è una classe che estende end Action, un file XML descrive il mapping delle def update action def update if person.save •Path, Action,Action, Controller •Rendering immagini) if person.save edirection redirect_action “display” Redirection redirect_action “display” else else render “customers/edit” •HTML/XML/RAW(es: render “customers/edit” end rl, Url, Path, Controller end •Redirection ••Filters seperation of concerns FrontpageController ilters Path, Action, Controller • FrontpageController Filters before_filter :cache Url, after_filter :compress :cache before_filter after_filter :compress rocessing chain, chain, seperation of concerns WebserviceController Processing WebserviceController before_filter :token_auth before_filter :token_auth •PossibilitàAuthentication, Caching, Before: Authentication, Caching, e l’output Auditing di processare l’input Auditing • AdministrationController •Before: Output compression Before: Authentication, Caching AdministrationController before_filter :ensure_login, :audit After: Localization, before_filter :ensure_login, •After: Localization, Compression • After: Localization, Output compression SecretController < Administrati... SecretController < Administrati prepend_before_filter :encrypt prepend_before_filter :encryp
  8. 8. AJAXAnd XML Asynchrnous JavaScript • È una tecnica: Web browser Server insieme di tecnologie web Login • Business XHTML/CSS XML/XSLT logic • User's User's DOM (Document Object Model) Deliver data partial client app • model data XMLHttpRequest model • (JavaScript) JavaScript Frequent requests for data • Nuovo approccio allo sviluppo User Client web session application • sviluppo di framework complessi • non richiede plugin Logout • •Non è un concept astratto Exit Yahoo Flickr page • GMail, Google Maps, Google Groups Shared • data Windows Live, Office Live model • •WEB 2.0 termine coniato dalla O’Really nel 2004. • da associare non tanto alle tecnologie quanto all’idea di evoluzione dell’usabilità del Web
  9. 9. Principi Base • •Il Browser carica un’applicazione, non il contenuto Il browser riceve dal server un engine JavaScript incaricato di gestire le azioni dell’utente. L’engine decide se è necessario chiedere informazioni al server (es: query DB) • •Il server invia dati, non pagine Ad ogni richiesta del browser, il server invia XML/HTML/JS. • La pagina viene modificata, non ricaricata. • L’interazione dell’utente con l’applicazione deve essere fluida e continua • Ogni azione dell’utente deve prevedere un feedback immediato • Esperienza di usabilità più vicina a quella Desktop • Maggiore interattività (componenti complessi, drag-n-drop) • •Nuovo modo di sviluppare interfacce L’usabilità e l’interazione con l’utente è fondamentale • Bisogna dimenticarsi le limitazioni attuali del Web
  10. 10. AJAX on Rails • •AJAX integrato in Ruby on Rails The Rails Way • •AJAX Framework Prototype.js drag-n-drop, effetti visivi, remote call • •Metodi helper per users”, :update=>”listUsersDiv”, semplificare lo sviluppo link_to_remote(“list all :url=>{:controller=>:account, :action=>:list}) • observe_field • periodically_call_remote • form_remote_tag • form_tag_with_upload_progress • Normalmente non occorre scrivere codice JavaScript
  11. 11. Rails e AJAX • Lo sviluppo dei Web Application sta avendo un notevole incremento. Avere a disposizione strumenti efficienti e chiari, come Rails, permette di diminuire i tempi di sviluppo e semplificare la mantenibilità del sistema • Non bisogna solo concentrarsi sullo sviluppo dei meccanismi lato server: l’interazione con l’utente deve essere la parte più importante. AJAX fornisce gli strumenti necessari per superare le limitazioni attuali del Web

×