Alessandro Ghizzardi è un MVP Microsoft nella categoria ASP/ASP.NET piuttosto famoso nelle Community italiane di sviluppo web in ambito ASP.NET (appunto), ed è uno dei fondatori di UgiDotNet, la più grande ed importante di queste community.
Mantiene anche un blog (e non poteva essere altrimenti), a questo link.
Lo scorso anno ha deciso di pubblicare questo relativamente piccolo libro che tratta le migliori tecniche di sviluppo in ASP.NET 3.5. Per un autore italiano scrivere un libro su ASP.NET deve essere senz’altro una bella sfida. Il rischio di è di “confondersi” con una marea di testi sul medesimo argomento. Wrox, Apress, Microsoft Press, Manning, O’Reilly e chi più ne ha più ne metta, hanno a catalogo non uno, ma una famiglia di testi su ASP.NET: per principianti, per intermedi, per avanzati, per….tutti i gusti insomma.
Ok si potrebbe controbattere, in lingua italiana non c’è poi tutta questa scelta, ma in inglese c’è sono una pletora, e per chi lavora in questo settore la lingua non è un problema (ho qualche collega che farebbe carte false pur di non dover leggere manuali in inglese, ma si tratta di casi patologici isolati).
L’autore di questo libro ha seguito allora un approccio diverso. Il canovaccio rimane il medesimo: breve storia dello sviluppo web e rapido ripasso di C#, struttura delle pagine .aspx, gestione dello stato, principali controlli server, interfacciamento coi database, ecc. ecc. Insomma la stessa scaletta già vista in decine di altri libri, alcuni recensiti sempre qua. Ma con qualcosa in più: trucchetti, consigli personalizzati su come risolvere problemi che si potrebbero presentare, idee spesso originali e inedite. Questo è il vero plus del libro.
Che il lettore si armi di matita (o evidenziatore), sorvoli sul “si usa così e cosà”, e si abbeveri all’esperienza dell’autore. Solo in questo modo si sfruttano a fondo i 30 euro del libro.
Ma veniamo al contenuto. Si parte con una doverosa, e per fortuna breve, storia sullo sviluppo web in ambito Microsoft, e nel secondo capitolo si effettua un sintetico, ma ben fatto, ripasso su C# (il linguaggio utilizzato negli esempi) e della programmazione OOP.
Essendo uscito nello scorso anno, il libro fa uso di Visual Studio 2008. Le immagini dell’ambiente di sviluppo sono numerose, e spesso il codice non è scritto nel testo ma mostrato come immagine tratta dal designer dell’ambiente di sviluppo.
Si prosegue poi con un’analisi dettagliata del web.config. tenere presente che quasi tutto il discorso dell’autore si applica solo per chi sta utilizzando Visual Studio 2008 (comunque ancora la maggior parte degli sviluppatori), dato che questo file di configurazione è cambiato parecchio in Visual Studio 2010.
Come si vedrà, spesso il codice degli esempi non viene scritto come testo, ma mostrato come immagine degli screenshot di Visual Studio. Qualche volta, purtroppo, sono troppo piccoli, e si fa fatica a leggerne il codice contenuto. Viene creata persino una configuration custom, approccio non certo da beginner, ma molto interessante per chi ha già una certa esperienza.
Stranamente non si fa cenno a che tipo di applicazione/sito web si andrà man mano a costruire. Solo verso le pagine 90-100, vedendo che si parla di carrello della spesa, si intuisce su cosa si va a parare. Sarebbe stato meglio magari, dedicare un paio di righe per spiegare l’obiettivo finale. Spendere decine di pagine con discorsi architetturali o di design, come fanno altri libri, non va bene, ma nemmeno lasciare il lettore nell’incertezza mi pare l’approccio migliore da seguire.
Abbastanza singolare, ma utilissimi per chi ha diversi anni di esperienza, sono i numerosi confronti con quanto accadeva in ASP 3.0. Certo, chi ha iniziato da poco farà notevole fatica a capire di cosa si sta parlando, ma per tutti gli altri rappresentano concetti molto utili ed interessanti.
A differenza di altri libri su ASP.NET inoltre, non si procede subito ad inondare il lettore con pagine e pagine sull’uso dei vari controlli web, ma ci si concentra prima sullo spiegare cosa è lo stato di una richiesta http e come lo si gestisce. Scommetto che Ghizzardi ha letto qualche libro di Dino Esposito, dato che l’approccio è molto simile. Solo nel capitolo 7 si inizia a mostrare il funzionamento e l’utilità di alcuni controlli, mostrando anche tecniche abbastanza inusuali scoperte dall’autore negli anni della sua attività.
Il fatto che, come dicevo, questo libro non è propriamente adatto ai principianti, lo si capisce nei capitoli successivi, in cui si iniziano a trattare dati XML con XPath e soprattutto a creare degli HTTPModule custom.
Si prosegue poi con i 3 indispensabili capitoli su ADO.NET e alcuni dei controlli databound (Repeater e GridView). L’argomento, ovviamente, è molto vasto, e sarebbe impensabile racchiudere tutti gli argomenti in una cinquantina di pagine, tra l’altro molto ricche di immagini. L’autore fornisce comunque delle buone basi su cui il lettore può partire per ampliare le proprie conoscenze. Il tutto sempre condito con alcuni preziosissimi consigli e raccomandazioni (ed intanto il piccolo sito di esempio si espande man mano).
Su argomenti variegati i restanti capitoli.
Autenticazione&Autorizzazione, Globalizzazione, Deploy e Web Service. Si parla anche di argomenti attinenti alle comunicazioni in rete, ed è piuttosto insolito trovare un tale argomento in un libro così relativamente piccolo.
Il discorso, anche in questi capitoli finali, è sempre orientato non solo nell’elargire le conoscenze necessarie, ma soprattutto nel far capire come evitare e risolvere eventuali problemi che potrebbero interessare lo sviluppatore alle prese con le varie tecnologie.
L’ultimo capitolo, il 21esimo, è un’infarinatura su Ajax, in cui si mostra come usare lo ScriptManager, l’UpdatePanel, l’UpdateProgress e il Timer, nulla più, ma è sufficiente per iniziare.
Non ci sono domande a quiz riepilogative al termine dei capitoli, e nemmeno esercizi da completare. D’altronde per riuscire a contenere il tutto sotto le 400 pagine non deve essere stato facile, e mi immagino che l’autore abbia dovuto ricorrere ad un maggior numero di tagli rispetto alle aggiunte.
Sul sito della FAG, i dettagli del libro sono reperibili a questo link.
dove è possibile scaricare il sommario dettagliato in formato Pdf. Purtroppo è il sole materiale disponibile.
Per il codice degli esempi, nel momento in cui scrivo, si rimanda al booksite e il file è grande poco più di 1 MB.
Una volta scompresso crea la solution organizzata in maniera esemplare, secondo quanto specificato man mano nei capitoli. Compila al primo colpo (e questo non sempre succede nei codici scaricati dai vari libri). È presente anche il file .sql per popolare il piccolo database “Unboxing4Course”, che deve essere prima creato all’interno del proprio SQL Server.
Ho provato anche a fare il porting della solution in Visual Studio 2010 e non si è verificato nessun problema.
A parte qualche piccolo e banale refuso, le note meno positive sono imputabili alla non ottimale impaginazione del testo. Il font utilizzato, un simil-arial, non è molto leggibile (come potrebbe esserlo un Times Nwe Roman). Le immagini sono spesso o troppo piccole o troppo poco definite. Il codice non sempre è indentato a dovere. Non si sfrutta a dovere il grassetto, e si fa fatica a rintracciare le parole chiave annegate nel testo. Per finire un cenno alla rilegatura: è dalla notte dei tempi che sottolineo la scomodità dovuta all’eccessiva rigidezza di praticamente tutti i libri della FAG. Se questo testo avesse avuto solo un centinaio di pagine in più, sarebbe stata un’impresa ardua leggerlo alla scrivania. Purtroppo noto che nulla è cambiato, a parte qualche miglioramento nelle intestazioni di pagina (che ora riportano il capitolo di appartenenza).
Il voto finale, e mi spiace dirlo, deve tener conto di questi problemi.
Concludendo posso raccomandare certamente questo libro, non ai principianti, ma a chi ha già una buona esperienza di sviluppo con ASP.NET in C#. I vari consigli, sparsi qua e là nel libro, valgono da soli tutto il prezzo di acquisto.
Consiglierei a Ghizzardi di non abbandonare la neonata carriera di scrittore: mi pare abbia una più che buona predisposizione a trasmettere le proprie conoscenze e competenze informatiche, e sarebbe un peccato abbandonarla così. Gli argomenti certo non mancano, così come la fantasia di sceglierli.
Qua sotto i dettagli del libro.
PRO
La ricchezza di consigli e raccomandazioni, unita alla prosa gradevole e non prolissa dell’autore, rendono questo libro un valido complemento ai classici omnicomprensivi manuali su ASP.NET. Ottimo, per sintesi e chiarezza, il secondo capitolo dedicato alla programmazione ad oggetti in C#.
CONTRO
Come scritto poco prima, il layout e l’impaginazione di questo testo è da rivedere completamente. Una maggiore cura realizzativa lo avrebbe reso ancora migliore.
Voto complessivo: 7,5/10
Lettore: Principiante/Intermedio
Sommario
.
Prefazione
Perché questo libro
A chi è rivolto
Come usare questo libro
1 Introduzione 15
Come è iniziato 15
Internet 16
Il World Wide Web 16
Le alternative 19
Java 19
PHP 21
Il web secondo Microsoft 22
Active Server Pages 22
ASPNET 23
Le basi del web: HTTP 24
La storia 24
Come funziona 25
HTTP e ASPNET 26
2 Cenni di programmazione a oggetti 27
Cos’è la programmazione a oggetti 27
La gestione della memoria 28
Namespace 30
Classi 31
Proprietà e campi 32
Metodi 33
Overload 34
Utilizzo 35
Ereditarietà e polimorfismo 35
Ereditarietà 36
Polimorfismo 36
Interfacce 38
Altri tipi di dato 39
Programmare con asp.net - Guida pratica allo sviluppo
Enum 39
Struct 40
Modificatori di accesso e nomenclatura 41
Modificatori di accesso 41
Nomenclatura 42
3 Il primo progetto web 45
L’ambiente di sviluppo 45
Tempo di scelte 48
Website o web application? 48
Locale o distribuita? 50
Il primo progetto web 51
Le pagine web 52
Gli altri elementi 53
Un giro di prova 54
Architettura di una pagina 56
Il markup e il code beside 56
I controlli e gli eventi 58
4 I controlli di base di ASPNET 61
Riempire una pagina 61
Le Master Page 62
Alcune considerazioni 67
Controlli standard di navigazione 68
I controlli di base 68
Interazione lato server 71
Placeholder 73
5 Configurazione 77
Le basi della configurazione 77
Il webconfig 78
Cos’è il webconfig 78
Come funziona 79
Anatomia del webconfig 80
82
83
84
84
Configurazione standard 85
Popolare il webconfig 85
Le class library 86
Custom configuration section 88
Creare la class library 88
Creare la custom configuration section 89
6 Gestione dello stato 95
Le basi 95
La query string 96
Cookie 99
Sessioni 102
Postback, Viewstate, Controlstate 104
Application 107
7 Il cuore di un progetto web: i controlli di input 109
Input control 109
TextBox e Button 110
DropDownList e ListBox 115
CheckBoxList e RadioButtonList 118
Validation control 121
RequiredFieldValidator 122
CompareValidator 124
RangeValidator 126
RegularExpressionValidator 127
CustomValidator 129
ValidationSummary 131
I validation group 133
CheckBoxList e RadioButtonList: una via alternativa 135
8 Il cuore di un progetto web: il runtime 139
La pipeline HTTP 139
Come funziona 139
La pipeline in dettaglio 141
HttpContext 142
HttpApplication 143
Il file globalasax 145
HttpModule 147
HttpHandler 151
9 Lavorare con Xml 157
La storia 157
Cos’è Xml 157
XPath 159
Gli oggetti di SystemXml 160
XmlDocument 160
XmlElement e XmlNode 164
SelectNodes e SelectSingleNode 165
Programmare con asp net - Guida pratica allo sviluppo
XmlAttribute 167
Scrivere file Xml 170
La scrittura 170
Considerazioni 173
10 Lavorare con i file 175
Il file system 175
Gli share di rete 177
Gli oggetti di System.IO 178
Directory e Directory.Info 179
File e File.Info 179
Drive.Info 180
Stream e scrittura 180
Stream e lettura 182
Stream binari 183
Il file system come repository 184
11 Accesso ai dati 189
ADONET 189
L’ambiente di test 191
Gli ORM 192
I NET data provider 193
Il database 193
Gli oggetti SqlClient 194
SqlConnection 194
SqlCommand 196
SqlParameter 196
Un giro di prova 198
SqlDataReader 200
SqlDataAdapter 201
I contenitori 203
12 Databinding 205
Concetto di Databinding 205
Metodologie di binding 206
Binding a livello di pagina 206
Binding a livello di controllo 207
Controlli avanzati 210
Eval e DataBinderEval 210
Repeater 211
FormView e DetailView 214
GridView 215
ListView e DataPager 218
Data source control e ObjectDataSource 219
13 Gestione avanzata dei controlli 221
Usercontrol 221
Utilizzo 223
Limitazioni 226
Custom server control 227
Preparare il terreno 227
Derived control 228
State management 231
Composite control 232
Templated control 234
Databound control 238
Preparazione 238
L’implementazione 239
14 ASP.NET e la cache 245
La cache 245
Output caching 247
Fragment caching 249
Post cache substitution 249
Programmatic caching 251
Sliding expiration e absolute expiration 251
Cache dependency 254
Callback event 255
15 Autenticazione e autorizzazione 259
Autenticazione 259
Windows authentication 260
Passport authentication 262
Forms authentication 263
L’utente 263
Forms authentication 264
Preparazione 264
L’oggetto FormsAuthentication 266
I metodi di FormsAuthentication 268
I controlli 269
Login 269
Login* 270
Considerazioni 273
Autorizzazione 273
16 Membership API 277
Provider model 277
Anatomia 279
I provider forniti dal Framework 282
Membership provider 283
Configurazione 283
Implementazione 287
Profile provider 290
Role provider 293
17 Globalizzazione e localizzazione 297
Localizzazione e globalizzazione 298
Il processo di globalizzazione 298
La culture 300
File di risorsa 302
Risorse locali e risorse globali 303
Utilizzare le risorse 306
Culture.Info 307
Formattazione 308
Persistere la cultura corrente 309
Un vero menu 311
18 Deployment e configurazione 313
Sviluppo, stage e produzione 314
Ambiente di sviluppo 315
Ambiente di stage 318
Ambiente di produzione 320
Tipi di pubblicazione 322
Cenno alla continuous integration 325
19 Lavorare con la rete 329
Mail 329
SystemNetMail 330
Configurazione 332
Template 334
HTTP 336
HttpWebRequest e HttpWebResponse 336
Utilizzo 337
Autenticazione 340
Dati binari 341
FTP 342
Una precisazione 342
Implementazione 342
20 Web service 345
I web service 345
Creare un web service 347
I web method 349
Consumare un web service 352
Particolarità 355
Tipi di dato 355
Web service e stato 357
Pubblicare un web service 359
21 Ajax 361
Script callback e Ajax 361
I controlli Ajax 363
ScriptManager 364
UpdatePanel 365
UpdateProgress 369
Timer 370
Interazione client/server 372
Page method 373
Web service 376
Conclusioni 378
Indice analitico 379