SlideShare une entreprise Scribd logo
1  sur  11
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
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
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
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
[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
[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
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
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
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
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
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

Contenu connexe

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

Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Archeo foss 2012 slides 1
Archeo foss 2012 slides 1Archeo foss 2012 slides 1
Archeo foss 2012 slides 1CSP Scarl
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10gPaolo Campegiani
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Clientguestbe916c
 
Portal Ibm 4 Sap Customers Live Integrations Vecchiato
Portal Ibm 4 Sap Customers Live Integrations VecchiatoPortal Ibm 4 Sap Customers Live Integrations Vecchiato
Portal Ibm 4 Sap Customers Live Integrations VecchiatoMax Ardigó 🇦🇷
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della SoluzioneLuca Milan
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXProgettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXLorenzo Cavina
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)Sabino Labarile
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveCommit University
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Consolidare per il rilancio
Consolidare per il rilancioConsolidare per il rilancio
Consolidare per il rilancioDavide Bombarda
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Railsguestfe3e15
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aopjdksrl
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 

Similaire à Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on Rails e AJAX (20)

Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e Delphi
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Archeo foss 2012 slides 1
Archeo foss 2012 slides 1Archeo foss 2012 slides 1
Archeo foss 2012 slides 1
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
Presentazione tirocinio
Presentazione tirocinio Presentazione tirocinio
Presentazione tirocinio
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10g
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 
Portal Ibm 4 Sap Customers Live Integrations Vecchiato
Portal Ibm 4 Sap Customers Live Integrations VecchiatoPortal Ibm 4 Sap Customers Live Integrations Vecchiato
Portal Ibm 4 Sap Customers Live Integrations Vecchiato
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXProgettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Consolidare per il rilancio
Consolidare per il rilancioConsolidare per il rilancio
Consolidare per il rilancio
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Rails
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aop
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
Microservices
MicroservicesMicroservices
Microservices
 

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

  • 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. 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. 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. 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. [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. [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. 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. 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. 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. 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. 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