Sei sulla pagina 1di 61

Web Frameworks

web development done right

Ingegneria del Software II


A.A. 2007/2008
Valerio Maggio 961/093
Prof. Sergio Di Martino
Sommario
● Web framework e Software framework
● New trends nello sviluppo web
● Web frameworks internals:
➔ Architettura e funzionalità di un web framework
➔ Caso di studio: Django – Principi e design
● Framework in actions:
➔ Realizzazione di un progetto con Django
1. Web framework e Software
Framework
Web Framework
● Definizioni:
– A web application framework is a software framework that is
designed to support the development of dynamic websites
[...] (it) aims to alleviate the overhead associated with
common activities used in Web development.
● (ref. en.wikipedia.org [a] )
– A Web framework is a collection of packages or modules
which allow developers to write Web applications without
having to handle such low-level details as protocols, sockets
or process/thread management.
● (ref. wiki.python.org [b] )
Framework Software
● Definizioni:
– In broad terms, a software framework is a code library
that is designed to help software development.
(ref. en.wikipedia.org [c] )
– A framework is a set of related classes and other
supporting elements that make application
development easier by supplying prebuilt parts.
(ref. [1])
● Framework software object-oriented
● Spesso sono considerati come l'equivalente object-
oriented di una libreria software
Framework vs Libreria Sw
● Condividono principi di Modularità e
Riutilizzo del Codice
● Libreria:
– necessario comprendere significato di ciascun
metodo
– operazioni complesse attraverso integrazione di
metodi più complessi
● Frameworks:
– realizzano la logica base di interazione tra le
diverse componenti
– vantaggi di estendibilità e flessibilità
2. New Trends nello sviluppo
web
Gli inizi
● Tecnologia CGI
– Perl: standard de-facto
– Numerosi svantaggi:
● problemi relativi alla sicurezza
● Soluzione non scalabile
● Difficilissima la manutenzione del codice:
”[...]unmaintainable generator of spaghetti code”
Real Web Programming
● Principi imperativi di sviluppo
– Stabilità
– Riutilizzo del codice
● Impiego di tecnologie consolidate per sicurezza
e scalabilità (Es. Java, .NET)
– Nascita dei primi framework (Heavy-weight)
● Introduzione di pratiche di progettazione OO
anche in ambito web
– Uso estensivo di progettazione mediante UML
Agile Web Programming
● Metodologie agili hanno particolare risonanza
nella comunita' di sviluppo web
● Diffusione del Framework: Ruby on Rails (2004)
– Sviluppo rapido e semplice
– Rapide interazioni
– Supporto ai cambiamenti “agile”
– Testing framework – Testing di applicazioni web
Agile Web Programming (2)
● Utilizzo di tecnologie di nuova generazione:
– Ruby , Python , Groovy...
● Riscoperta di linguaggi di Scripting per lo
sviluppo web
● Framework → Introduzione di design principles
– particolarmente graditi nella comunità agile
– oramai diventati dei must in ogni web framework
3. Web Frameworks internals
Introduzione
● Prima di descrivere le caratteristiche
interne di un web framework...
– Analizziamo le problematiche che hanno
portato all'architettura dei framework web
– Comprendiamo la ragioni per cui utilizzare
un framework nella realizzazione di un
progetto web
Java Servlet

Vantaggi:
● Sicurezza (Java)
● Multi-threading

Problemi ?
● Leggibilità del codice
● ”Troppo codice HTML

in codice Java”
Java Servlet (2)

Cosa succederebbe se dovesse essere


ncessario mostrare le STESSE informazioni
attraverso una lista HTML ordinata invece che
attraverso una tabella?

→ Implementazione di una nuova servlet

Quanto sarebbe diversa la nuova servlet da


quella già esistente?
Java Servlet (3)
● Molto codice duplicato
Java Server Pages
Vantaggi:
● Trasformata in
servlet
● Maggiore
Leggibilità

Svantaggi:
● “Troppo codice
Java nell' HTML”
Java Server Pages (2)
ESEMPIO
● Consideriamo una semplice architettura di
esempio realizzata mediante l'utilizzo di
Java Server Pages

→ Analizziamola per scoprirne I difetti


Java Server Pages (3)

– Architettura di un'applicazione web intuitiva


● Ogni componente si occupa di gestire un singolo
e specifico compito
Model 1 Pattern

● Architettura “Task-centric”
● Sviluppo rapido e semplice
Model 1 Pattern (2)
● Svantaggi:
– Design delle componenti (Jsp, Servlet)
estremamente complesso
– Difficile la manutenzione del codice
– Richiede skill-set degli sviluppatori adeguato

→ Ma qual è il vero problema ?


Problema principale
● Alto Accoppiamento tra
– Presentazione dei dati
● Come mostrare le informazioni
– Elaborazione dei dati
● Quali informazioni mostrare
– Acquisizione dei dati
● Quali informazioni estrarre dal DB
MVC Pattern
● MVC : Model – View – Controller
● Noto anche come Model 2 (Java)
● MVC nasce per applicazioni standalone OO
– View:
● gestisce la logica necessaria per l'interfaccia utente
● ottiene informazioni dal modello
– Controller:
● gestisce gli input forniti dall'utente (Mouse, tastiera)
● controlla le view in funzione degli input dell'utente
– Model:
● gestisce la rappresentazione dei dati
● definisce tutte le operazioni sui dati
MVC Design Pattern (2)
Vantaggi nell'uso di MVC
● Presentazione, Elaborazione e
Acquisizione dei dati completamente
svincolate:
– Vista riutilizzabile o sostituibile senza
modificare la logica (controller)
– Viste multiple per lo stesso modello
– Vistae il Controller indipendenti dalle
modifiche al Modello
Web Application MVC Pattern

→ Versione semplificata:
● Non necessario Observer per web applications
● Modifiche visualizzate sempre on demand
MVC in Java

● View : JSP
● Controller : Servlet
● Model : EJB e JavaBeans
MVC in Java (2)
● Architettura riorganizzata secondo MVC (Model 2)
JavaBeans
● JavaBeans sono semplici classi Java soggette
ad alcune convenzioni:
– Costruttore senza parametri
– Le proprietà di un bean devono essere manipolate
da metodi Getter e Setter
● Implementano java.io.Serializable
– Salvare e ripristinare lo stato di un Bean
● Sono facilmente “manipolabili” da una JSP
JavaBeans (2)
JSP + JavaBeans
Architettura Model 2
● C'è ancora un aspetto non considerato:
Accesso al database

● Logica di accesso al database


distribuita nelle componenti di ● Logica di accesso al
controllo (JSP, Servlet) database rifattorizzata e
● Domanda: centralizzata in classi
“Supporta modifiche allo dedicate
schema del database ?”
Active Record pattern
● Un oggetto che fa da
“wrapper” di una
entità o una vista del
database, ne
incapsula l'accesso e
gestisce la logica di
dominio su di essa.

→ Open Issue: Come realizzare effettivamente


questo mapping 1:1 tra Entità-Oggetti ?
Object-Relational Mapping
● ORM
● Object Relational Impedance Mismatch
Vantaggi:

● Accesso al
database con una
logica ad oggetti

●Indipendenza dal
database

● Caching
3.1 Architettura e funzionalità
di un web framework
Web Frameworks

● Heavy weight frameworks


● Next-Generation Frameworks
Heavy-weight Java Frameworks
● Primi framework di sviluppo web:
– Struts, WebWork, Tapestry
– Hibernate (ORM)
● Basati sull'architettura Model 2
● Heavy-Weight Frameworks:
– Configurazione mediante numerosi file XML
– Curva di apprendimento abbastanza alta
H-W Java frameworks: Struts
H-W Java frameworks: Hibernate
Next-generation web frameworks
Obiettivi:
● Architettura basata su MVC pattern
– Introduzione di design principles
● Rendere lo sviluppo semplice e immediato
– “agile development”
● Offrire uno stack completo di funzionalità
– Full-stack framework
Sviluppo agile
● Lo sviluppo agile favorisce:
1) Approccio diretto al problema rispetto all'uso di
processi e tool di progettazione
2) Software funzionante rispetto software ben
documentato
3) Customer on site rispetto alla stipula di un contratto
4) Supportare le modifiche in fase di sviluppo invece di
pianificarle a priori (nota: ottimo locale)

● Principi adatti e “adattabili” al WEB ?


Sviluppo agile (2)
● Approccio diretto al problema rispetto
all'uso di processi e tool di sviluppo:
– Nessun heavy-toolset
– Nessun complesso file di configurazione
da settare
– Nessun processo elaborato
– Works out of the box
Sviluppo agile (3)
● Software funzionante rispetto a software
ben documentato
– generazione automatica di
documentazione
● Customer on site rispetto alla stipula di un
contratto
– Velocitá di sviluppo e feedback immediati
Sviluppo agile (4)
● Supportare le modifiche in fase di
sviluppo invece che pianificarle a priori
– Testing emphasis
– Rispetto dei design principles
Design Principles
● Convention over configuration
● DRY (Don't repeat yourself)
Design Principles (2)
● Convention over configuration
– “Convention over Configuration is a programming design that
favors following a certain set of programming conventions instead
of configuring an application framework. [...]”

● DRY (Don't repeat yourself)


– “DRY is a principle that focuses on reducing information
duplication by keeping any piece of knowledge in a system in only
one place.
Full-stack web frameworks
● From Python.org wiki:
– [..] frameworks provide support for a number of
activities such as interpreting requests, producing
responses, storing data persistently, and so on.
[..] those frameworks [..] are often known as full-
stack frameworks in that they attempt to supply
components for each layer in the stack.

→ Da cosa è composto lo stack ?


Stack delle funzionalità
● View
– Linguaggio di Templating
– View Composition
– Web server di sviluppo
● Controller
– Definizione di controller
– URL routing
● Model
– ORM automatico
– Astrazione (OO) dell'interazione con il database
Linguaggi di Scripting: Python
“Speed and flexibility of development are critical.
Dynamic languages let you get more done with less
lines of code (which means less bugs)”

● Nulla a che vedere con il


Javascript o PHP :)
● Linguaggio con una forte
orientazione agli oggetti
● Sintassi pulita ed elegante
– Strong Typed
– Dynamic Typed
Python Dynamic Typing

“Duck Typing”
Walks like a duck?
Quacks like a duck?
It's a duck!
Django web framework
“Django is a high-level Python Web framework that
encourages rapid development and clean, pragmatic
design.”

Caratteristiche di Design:
● Model-View-Controller for the Web
● Written in Python
● Explicit instead of implicit
● Loose Coupling
● Don't repeat yourself
MVC o MTV
Django utilizza una nomenclatura leggermente differente per
MVC:
● Model: rappresenta I dati del dominio
– classi Python
– memorizzate automaticamente in DB (ORM)
● View: definisce cosa l'utente “vede”
– Funzioni Callback in python (non classi)
● Templates: Definisce come l'utente vede
Django web framework (2)
Django Stack
● Database wrapper (ORM)
● URL dispatcher
● Template system
● Admin Framework
● I18n & l10n
● Authentication
● RSS
● .....
Progetti e Applicazioni
● Progetto:
– Insieme di applicazioni Django più il file di
configurazione per queste applicazioni
● Applicazione: Parte del Progetto
– Insieme di funzionalità di Django portabili
– Favorisce il riutilizzo
– Django Pluggables
URL Dispatcher
● Django impiega un meccanismo di mapping tra:
– URL e View
– Match di regular expressions
● Loose coupling principle anche per URL
● File urls.py
Template Language
● Molto restrittivo
– Permette di effettuare esclusivamente operazioni di
presentazione
– Vieta la logica
● Molto poco Pythonico
– Aspetto importantissimo
– Mirato ai web designer non ai programmatori
● Ereditarietà tra file di templates
– Code Reuse
Template Language (2)
● Ereditarietà dei template
– Definita mediante Blocks
Template Language (3)
● Variabili:
{{ variable_name }}

● Tags
– permettono di realizzare operazioni più complesse
senza la presenza di codice Python

{% template_tag %}

● Filters
– Permettono di manipolare gli output dei valori di una
variabile

{{ variable|filter }}