Tutte le letture e gli esercizi che non siano esplicitamente marcati come "facoltativi" sono parte del programma di esame.
I lucidi che potete trovare in questa pagina non sono un sostituto per il libro di testo o per gli altri materiali che vi segnalo. I lucidi non contengono un discorso completo, ma solo una traccia, che è comprensibile soltanto nel contesto di quello che dico a lezione quando li proietto.
Lo scopo di rendervi disponibili le slide è di lasciarvi una traccia dei discorsi che abbiamo fatto a lezione. Per chi non era presente, l'unica utilità delle slide è come promemoria degli argomenti che sono stati trattati.
Insomma, ripeto: non limitate il vostro studio ai lucidi!
git clone https://github.com/xpmatteo/tecnologia-e-applicazioni-internet-2012.gitPer aggiornare successivamente, usare
cd tecnologia-e-applicazioni-internet-2012 git pull
Minuti acquistati: 0
2012-04-03 13:24 | 5 minutes |
2012-04-03 14:14 | 7 minutes |
2012-04-03 19:14 | 54 minutes |
Abbiamo risolto l'esercizio di lezione precedente: fare una pagina di amministrazione che mostri l'elenco delle ricevute di parcheggio acquistate. Questo ha comportato:
Ho fatto un disegno della struttura dell'applicazione e l'ho anche fotografato:
Per usare i template, nell'esercizio di oggi abbiamo introdotto la classe TemplateView, che ha come scopo di interfacciare il nostro codice alla libreria di templating che abbiamo scelto. Il principio è quello di mantenere isolato il codice della nostra applicazione dalle dipendenze da librerie di terze parti, per due ragioni: uno, perché potremmo decidere in seguito di cambiare libreria e passare, ad esempio, a Velocity, e non vorremmo dover girare per tutta l'applicazione a cambiare le nostre view. E due, perché vogliamo fissare una volta per tutte come abbiamo deciso di usare la libreria FreeMarker. Se ad esempio un domani decidiamo che i template vanno caricati in maniera diversa, ad esempio dal classpath invece che dal filesystem, le modifiche sarebbero concentrate in un unico punto.
Altra classe introdotta oggi è XmlFragment, che parsa una stringa che contiene XML, e permette di interrogare il documento mediante XPath. Questo ci sarà molto utile per testare in maniera precisa le view. Anche qui il principio è di concentrare in una sola classe la maniera con cui usiamo una libreria, in questo caso il parser XML. Non c'è bisogno di dire che per poter usare questa libreria, il nostro codice HTML deve essere XML valido, il che è sempre una buona idea.
Risorse statiche. Layout.
Abbiamo visto una soluzione al problema per casa della volta scorsa. Abbiamo parlato dell'importanza di non condividere la connessione al DB fra diverse richieste. La soluzione da me suggerita è di aprire una nuova connessione per ogni richiesta, ricordandosi di chiuderla non appena la richiesta è stata gestita. Una soluzione alternativa potrebbe essere di usare un connection pool.
Abbiamo visto come fare in modo che la nostra applicazione possa restituire risorse statiche come file CSS o immagini. Se usassimo un container di servlet come Tomcat o Jetty questo sarebbe già gestito; ma poiché invece utilizziamo un framework molto più vicino al protocollo HTTP, queste cose dobbiamo gestircele da soli. Abbiamo visto come applicare il pattern decorator per gestire le risorse statiche senza toccare il codice del resto dell'applicazione (vedi classe StaticAssetContainer nel codice della lezione.)
Poi ci siamo posti il problema di come definire un layout generale dell'applicazione, che definisca header, footer e altre cose comuni a tutte le pagine dell'applicazione. Abbiamo definito una classe ApplicationLayout e abbiamo visto come usare TemplateView per implementarla.
L'interfaccia utente sarà simile a questa:
Fattura | |
---|---|
Descrizione | Importo |
|
|
Voce 1 | € 100,00 |
Voce 2 | € 300,00 |
Voce 3 | € 600,00 |
Imponibile | € 1000,00 |
IVA al 21% | € 210,00 |
Totale | € 1210,00 |
Procedimento suggerito:
+------------+ 0..* +------------+ | Invoice |<>---------| LineItem | +------------+ +------------+Un LineItem rappresenta una "riga" della fattura e contiene una description e un amount e sa come formattare correttamente una riga. In pratica la fattura è essenzialmente una lista di LineItem.
Nota: non usare float o double per il denaro!!! La matematica in virgola mobile non è esatta. Rappresentiamo il denaro con una quantità intera di centesimi. In alternativa possiamo definire una classe Money che incapsula una quantità intera di centesimi ed espone metodi per sommare e per formattare.
Implementare prima la logica del gioco in JavaScript con TDD. Poi realizzare l'interfaccia utente in HTML.
Per rendere la cosa ancora più interessante: realizzare tutta l'interfaccia utente in JavaScript, nel senso che il documento HTML inizialmente contiene soltanto
<html> <head><title>Lights Out!</title></head> <body><div id="puzzle"></div></body> </html>
Tutti i bottoni vengono creati tramite istruzioni jQuery (vedi append). In questo modo anche la dimensione del puzzle viene scelta a caso fra 3x3, 4x4 e 5x5.