ASP.NET svelato – Intervista a Alex Homer e Dave Sussman

Intervista a Alex Homer e Dave Sussman, autori del miglior manuale oggi disponibile per ASP.NET: Professional ASP.NET 1.0 Special Edition

Vedi anche:

  1. A seguito del successo di Professional ASP.NET beta 2, edito da Wrox, sta per uscire Professional ASP.NET 1.0 Special Edition. In cosa differisce dal precedente? Uno sviluppatore ne ha davvero bisogno se ha già acquistato il primo? [Risposta 1]
  2. ASP.NET non è semplice come ASP e lo stesso si può dire del .NET Framework. Il codice ASP dovrebbe essere riscritto per ottenere i benefici delle nuove caratteristiche di ASP.NET. Quali sono le vostre previsioni per il successo di questa piattaforma? [Risposta 2]
  3. Qual è secondo voi la migliore caratteristica di ASP.NET ? E cosa invece si sarebbe potuto migliorare o aggiungere in ASP.NET ? [Risposta 3]
  4. ASP.NET e il .NET Framework sembrano molto simili a JSP e alla piattaforma Java, ma forse mi sbaglio, vero ? [Risposta 4]
  5. Molti sviluppatori credono che sviluppare applicazioni ASP.NET con VB.NET o con C# sia praticamente lo stesso. Che cosa ne pensate? C’era davvero bisogno di un nuovo linguaggio come C#? [Risposta 5]
  6. ASP.NET è composta di molti componenti, primo fra tutti il controllo DataGrid. Sono controlli veramente potenti o è necessario scrivere un bel po’ di codice nelle situazioni reali? [Risposta 6]

A seguito del successo di Professional ASP.NET beta 2, edito da Wrox, sta per uscire Professional ASP.NET 1.0 Special Edition. In cosa differisce dal precedente? Uno sviluppatore ne ha davvero bisogno se ha già acquistato il primo?

Alex Homer

Quello che cambia è che abbiamo preso il testo e il codice e li abbiamo controllati e adattati per la versione 1.0 di ASP.NET e del .NET Framework.

Ci sono anche alcune novità. Ho aggiunto un nuovo esempio su ADO.NET per illustrare i vantaggi di una nuova caratteristica del DataAdapter.

Poco prima del rilascio finale sono cambiate le specifiche di sicurezza, così il capitolo 14 è stato modificato in più punti. Anche altri capitoli sono stati aggiornati per riflettere le ultime modifiche al Framework. Abbiamo infine rivisto accuratamente tutti i capitoli per includere le correzioni degli errori e i suggerimenti ricevuti.

Se avete la versione beta 2 del libro, vi accorgerete che quasi tutto funzionerà egregiamente (anche se dovete scaricare l’ultima versione dell’errata corrige [nuova finestra] da o direttamente da http://www.wrox.com/). Inoltre, usando il servizio online di Wrox, sarete in grado di acquistare la nuova versione del libro in formato elettronico a prezzo speciale.

Va comunque detto che per gli sviluppatori il libro vale il suo prezzo e recupereranno il costo non appena gli verrà richiesto di realizzare soluzioni ASP.NET.

Dave Sussman

Abbiamo sostanzialmente allineato il libro con la versione 1 di ASP.NET. Siamo infatti rimasti in stretto contatto con il gruppo di sviluppo ASP.NET (non a caso uno degli autori lavora in questo gruppo) e sebbene Microsoft non avesse pianificato dei cambiamenti nella versione definitiva, inevitabilmente qualcuno ce n’è stato.

Complessivamente non ci sono stati degli stravolgimenti tra la beta 2 e la versione finale, ma ci sono state alcune modifiche che hanno avuto un certo impatto. Un’area di grandi cambiamenti è stata ad esempio la sicurezza.

La maggior parte degli esempi presenti nel vecchio manuale dovrebbe funzionare, ma ce ne potrebbero essere alcuni di inaccurati. Ho sensibilmente migliorato gli esempi della nuova edizione, tanto che sono ora disponibili sia in Visual Basic .NET sia in C# e sono installati con un apposito programma di setup. Potete probabilmente continuare ad usare la vecchia versione del libro, ma scaricare i nuovi esempi è sicuramente qualcosa che vale la pena fare.

Un’altra cosa che ci eravamo ripromessi era di correggere i diversi errori che sono finiti nel libro, soprattutto di ortografia e di grammatica. Sotto questo aspetto l’edizione 1.0 dovrebbe mostrare un sensibile miglioramento.

Top

ASP.NET non è semplice come ASP e lo stesso si può dire del .NET Framework. Il codice ASP dovrebbe essere riscritto per ottenere i benefici delle nuove caratteristiche di ASP.NET. Quali sono le vostre previsioni per il successo di questa piattaforma?

Alex Homer

La mia opinione è sicuramente di parte, visto che mi sono occupato di ASP.NET per un lungo periodo, anche se il suo sviluppo si è protratto principalmente nel corso degli ultimi due anni. Mi piace ASP.NET, e odio dever tornare a lavorare con ASP 3.0. Questo succede a tutti gli sviluppatori con cui ho modo di parlare.

Inoltre, non c’è nessun rischio nell’installare ASP.NET e nel provarlo, visto che coesiste con ASP 3.0 senza problemi. Il nostro sito (mio e di Dave, consultabile all’indirizzo http://www.daveandal.com/ [nuova finestra]) include sia pagine ASP 3.0 sia ASP.NET. Se avete Windows 2000 (o XP) potete provare ad installare ASP.NET, visto che è stato anche rimosso con successo senza sconvolgere il sistema operativo.

Quindi, perché non usare ASP.NET? Penso che il livello di adozione aumenterà in breve tempo da parte di sviluppatori web Microsoft. Non escludo che si potrebbero verificare delle “conversioni” anche da chi oggi usa altre piattaforme.

Riguardo alla piattaforma .NET in generale (invece che solo ASP.NET), non sono più così sicuro. Avrà certamente successo, ma in quanto tempo dipende dalla velocità con la quale gli sviluppatori installeranno il Framework .NET sulle loro macchine. Anche in questo caso, visto che non cambia il sistema operativo e il .NET Framework sarà disponibile in service pack o installato con le prossime versioni dei prodotti, potremmo assistere ad una veloce adozione.

Dave Sussman

Penso che la tecnologia ASP.NET sia eccezionale, in quanto è decisamente migliore rispetto alle versioni precedenti. Ogni cosa è molto più semplice da fare. La class library fornisce praticamente tutto quello che prima era necessario gestire via codice e la nuova architettura rende il codice manutenibile.

Sono però d’accordo: riscrivere il codice è l’unico modo per ottenere il meglio da ASP.NET. Alcuni si sono lamentati di questa necessità, ma personalmente sono convinto che siamo rimasti legati fin troppo a lungo a prodotti di qualità inferiore solo per garantire la “backward compatibility” (compatibilità verso il basso). Arriva un giorno in cui bisogna stringere i denti e abbracciare il futuro e io sono convinto che .NET sia il futuro per gli sviluppatori Microsoft.

Top

Qual è secondo voi la migliore caratteristica di ASP.NET? E cosa invece si sarebbe potuto migliorare o aggiungere in ASP.NET?

Alex Homer

Penso che la caratteristica più importante sia il fatto che le pagine sono compilate come file di classi, invece di essere semplicemente interpretate ed eseguite ad ogni richiesta. Questo è quello che ci permette di usare tutte le altre funzionalità, come l’architettura orientata agli oggetti e gli ottimi controlli lato server.

Se non ci fossero la compilazione e il caching del codice eseguibile, sarebbe impensabile usare ASP.NET. Il processore ASP.NET impiegherebbe infatti troppo tempo a costruire pagine complesse con un’enormità di controlli e oggetti ogni volta che la pagina è richiesta.
Tutto questo dipende naturalmente dallo strato sottostante, il .NET Framework, senza il quale ASP.NET non esisterebbe.

E’ difficile dire cosa manca o pensare a qualche cosa che si sarebbe potuta realizzare meglio. Penso che stiamo ancora cercando di capire cosa è possibile fare, e quale è il modo migliore di usare ASP.NET per soddisfare le nostre necessità. Con il passare del tempo ogni lacuna, debolezza e difetto diventeranno ovvi.

L’unica area nella quale ho trovato qualcosa di migliorabile è ADO.NET: a volte ho difficoltà a ottenere ciò che voglio. Probabilmente questo è causato dal fatto che mi aspetto troppo, visto che si tratta di una tecnologia molto potente e generale.

Diciamo che potrei essere più critico fra un anno?

Dave Sussman

Uhm…domande difficili. La cosa migliore è probabilmente l’architettura. Mi piace avere un modello di programmazione basato sugli eventi, che rende il codice molto più pulito.

Non riesco a trovare nessun grosso difetto ad ASP.NET, penso sia una tecnologia eccezionale.
L’unica cosa che ho notato (il gruppo di sviluppo non ha avuto il tempo di cambiarla) è che la funzionalità di tracing è “chiusa”. Mi sarebbe piaciuto avere la possibilità di estenderla, magari scrivendo su un database e un monitor tcp invece di usare un sistema di default.
Un meccanismo cioè simile al .NET Trace Listeners, dove è possibile estendere o rimpiazzare lo schema di tracing esistente.

Ho anche qualche problema con le class library. Sarebbe interessante avere qualche altra classe ereditabile invece che chiusa.

Avrei infine piacere di poter usare un modello di database connesso. È infatti un approccio ancora largamente diffuso: avere a che fare con un modello disconnesso può a volte essere scomodo.

Top

ASP.NET e il .NET Framework sembrano molto simili a JSP e alla piattaforma Java, ma forse mi sbaglio, vero?

Alex Homer

Dipende da cosa si intende con “simili”. L’idea di avere una virtual machine o un runtime non è nuova. Visual Basic aveva un runtime, che compilava il P-code in codice binario per l’esecuzione. Sotto questo punto di vista si può dire che Visual Basic è simile a Java (e quindi che ASP è simile a JSP).

Lo scopo di avere una virtual machine, specialmente nel caso di Java, è di rendere indipendente il codice del programma dal sistema operativo. Un problema è dato però dalla velocità e dall’efficienza: le virtual machine provocano sempre un calo di performance se vogliono essere indipendenti dalla piattaforma.

.NET non è una virtual machine, ma è invece un vero runtime. Si posiziona sempre tra il codice del programma e il sistema operativo, ma il codice che .NET esegue è prima compilato in un file binario di tipo Microsoft Intermediate Language (MSIL). Il runtime è in grado di eseguire il codice MSIL in modo molto efficiente, con una minima conversione. Il runtime usa inoltre tutta una serie di funzionalità, dalla compilazione just-in-time alle tecniche di caching, per massimizzare le prestazioni: un’area che Java deve ancora prendere in considerazione.

Per questo ASP.NET e la piattaforma .NET all’oggi si avvicinano di più all’esecuzione di codice nativo di quanto facciano JSP e Java.

Dave Sussman

Così dicono, ma non so praticamente nulla di JSP, così non sono nella condizione di dare un giudizio. ASP.NET è frutto della volontà da parte del gruppo ASP di migliorare il loro prodotto, indipendentemente da Java. Anche se fosse realmente simile a Java, non ci trovo alcun problema. I sostenitori di Java si lamentano con Microsoft perché secondo loro la casa di Redmond non è in grado di realizzare prodotti alla stregua di Java. Poi però si lamentano nuovamente quando i prodotti ci sono. C’è abbastanza posto per tutti e due. Vorrei che entrambe le parti se ne rendessero conto e lavorassero per l’interoperabilità tra i due mondi.

Top

Molti sviluppatori credono che sviluppare applicazioni ASP.NET con VB.NET o con C# sia praticamente lo stesso. Che cosa ne pensate? C’era davvero bisogno di un nuovo linguaggio come C#?

Alex Homer

È praticamente la stessa cosa, perché generalmente si usano le classi delle librerie .NET: i metodi e le proprietà sono le stesse indipendentemente dal linguaggio usato. La sintassi è comunque alquanto diversa e passare da un linguaggio all’altro (specialmente da VB.NET e C#) non è banale.

Per uno sviluppatore Java e C++, C# è sicuramente più facile da imparare, mentre gli sviluppatori VB (e anche quelli VBScript) avranno presto la padronanza per lavorare con VB.NET.

Una cosa su cui porre l’accento è che entrambi i linguaggi hanno la loro sintassi “privata”. Visual Basic NET, per esempio, consente ancora l’uso di funzioni come Instr. Bisognerebbe cercare di usare le librerie che sono comuni a tutti i linguaggi, invece di quelle private. In questo caso è meglio usare IndexOf (un metodo della classe System.String), invece di InStr.

Tutti i linguaggi sono simili in .NET (con alcune piccole eccezioni), e il linguaggio che si sceglie dovrebbe essere quello con cui si è più produttivi. Non c’è niente di male nell’imparare altri linguaggi (volete forse provare a usare COBOL?), ma non c’è nessun obbligo.

Ci sono molte ragioni che giustificano la creazione di un “nuovo” linguaggio come C#. Né C++ né JScript sono la soluzione ideale per .NET. Era inoltre poco probabile che Microsoft potesse offrire Java. J++ è invece la “versione” Microsoft di Java e poteva sembrava allettante. Sebbene C# non sia semplicemente J++ con un nome diverso, ci sono delle similitudini che fanno sentire a casa i programmatori J++. C# è anche uno standard aperto (traguardo a cui nessun altro linguaggio può aspirare), e così potrà essere portato su altri sistemi operativi se e quando necessario.

Dave Sussman

Non hai idea di quanto sono stanco di queste questioni relative ai linguaggi. Ho lavorato per molti anni come programmatore assembler e C prima di avvicinarmi a Visual Basic, semplicemente perché erano più adatti ai miei scopi. Ho passato anni ad essere guardato “dall’alto al basso” dai programmatori C++. Adesso che abbiamo un ambiente dove il linguaggio usato è irrilevante, c’è ancora chi si preoccupa di queste cose.

In ASP.NET non c’è nessuna differenza sostanziale tra C# e VB.NET. Ci sono alcune cose che non si possono fare con VB.NET (come il codice unsafe), ma penso che pochi avranno bisogno di usare queste funzionalità. Fino a che si sviluppano applicazioni ASP.NET, potete usare quello che volete: VB.NET, C# o addirittura COBOL.NET. Dovreste programmare con il linguaggio che preferite o che vi viene richiesto. Non è un buon approccio usare C# se il resto del vostro gruppo di sviluppo usa VB: la manutenzione del codice è importante.

Allora, direte voi, perché un nuovo linguaggio? Microsoft sarebbe stata sicuramente contenta se avesse potuto continuare con lo sviluppo del loro J++. Volevano un C++ senza le complessità di C++, ma le questioni di licenza Java e le seguenti battaglie legali da parte di Sun hanno messo una pietra sopra ogni possibile sviluppo futuro.

Hanno così creato un nuovo linguaggio che non fosse però totalmente diverso, anche se è sicuramente complesso da imparare. C# ha uno stile di programmazione molto più pulito rispetto a C++.

Personalmente mi piace il C# e lo uso quando posso per il mio codice. Dopo molti anni di programmazione VB è piacevole ritornare allo stile del linguaggio C: Visual Basic è troppo prolisso (e ho sempre odiato la lineetta che si usa per continuare il codice su un’altra riga).

Top

ASP.NET è composta di molti componenti, primo fra tutti il controllo DataGrid. Sono controlli veramente potenti o è necessario scrivere un bel po’ di codice nelle situazioni reali?

Alex Homer

Alcuni di questi controlli sono “semplici”, nel senso che non fanno nient’altro che rendere disponibile un tag al lato server, perché sia usato nel codice. Un esempio è dato dai controlli di tipo <input runat=”server”>. Anche se sono semplici, questi controlli (presenti nel namespace System.Web.UI.WebControls) hanno già alcuni sensibili vantaggi: usano ad esempio una nomenclatura chiara e standard per le proprietà, facilitando la creazione di pagine. Il RadioButton include un’etichetta di testo, così non è necessario usare degli <span> o altre tecniche come si farebbe con l’Html.

Ci sono anche dei controlli raffinati, tra i quali i più famosi sono il controllo calendar, i validation control e i list control (come per esempio la DataGrid). Anche questi risparmiano la scrittura di molto codice lato server. I validation control, in particolare, riconoscono il browser e creano codice lato client, che riduce la comunicazione client/server e migliora l’esperienza degli utenti con Internet Explorer 5 e successivi. Saranno aggiunti senza dubbio altri controlli in futuro: non dimenticate che ci sono molti controlli di terze parti attualmente in sviluppo, se non già disponibili. Stanno per arrivare nuovi controlli di tipo DataGrid che sono molto più potenti del controllo standard incluso nel .NET Framework.

Dave Sussman

Sfortunatamente, non puoi cavartela senza scrivere codice. La quantità di codice da scrivere è comunque decisamente ridotta.
Il controllo DataGrid semplifica senza dubbio le cose, e anche se non fa tutto quello che vorresti, lo puoi sempre personalizzare. Non solo c’è un alto grado di flessibilità se si usano i template, ma puoi anche estendere la classi con le tue funzionalità.

Anche il resto dei controlli è estremamente ricco, tanto che oggi disponiamo di controlli per Internet Explorer che usano il Dhtml e consentono di incorporare “tab” e “tree view” nelle pagine, migliorando l’esperienza degli utenti.
Questi controlli si adattano automaticamente per gli altri browser, così da poter essere applicati nei casi reali.

Anche la possibilità di scrivere i propri controlli e usarli come parte dell’architettura .NET è una caratteristica alquanto flessibile.

Top

ASP.NET: Server Roundtrip e ViewState

Corso ASP.NET: terza puntata

Esempio funzionante | Sorgente | Scarica il sorgente (zip)

Le form di tipo PostBack, come abbiamo visto nella scorsa puntata, consentono di mantenere lo stato tra le pagine web (“state bag”).

Il “trucco” usato non è nuovo: le form passano e ricevono dal server dei parametri in un campo nascosto. Lo fanno però senza che se ne occupi il programmatore, velocizzando sensibilmente il tempo di sviluppo.

Il campo nascosto prende il nome di Viewstate.

Se analizziamo il sorgente di una pagina Html contenente una Form Postback, ad un certo punto compare qualcosa di simile a:

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA5MDY5ODU4MTt0" />

Si tratta proprio di un campo nascosto il cui valore è una stringa crittografata. La stringa contiene, tra le altre cose, il valore dei controlli della form PostBack precedente l’ultimo invio.

Il Web Form processor di ASP.NET si vedrà così arrivare due valori per i campi: quello attuale (nella Querystring o nella collezione Form) e quello precedente (sottoforma di stringa crittografata che è in grado di decifrare). In questo modo può confrontare, di volta in volta, le variazioni dei controlli della pagina e simulare uno “stato” tra le diverse chiamate della pagina.

Lo svantaggio nell’uso del campo ViewState è dato dalla sua dimensione, che può crescere considerevolmente nel caso di numerosi controlli sulla pagina, sopratutto se questi contengono dati provenienti da un database. Il passaggio di valori tra client e server prende il nome di Server RoundTrip

La soluzione, come vedremo in un’altra puntata, è di disabilitare per tutta la pagina o solo per alcuni controlli il mantenimento dello stato.

Il campo ViewState può anche essere usato in modo esplicito dal programmatore. A differenza dell’oggetto Session o di quello Application, può essere utile per passare dei valori e dei parametri durante i submit della pagina.

Vediamo come con un esempio

Programmare il View State

La pagina contiene un contatore e un campo che visualizza alternativamente il nome di due colori: rosso e nero.

Il primo caricamento della pagina
Il primo caricamento della pagina

Premendo il pulsante, il contatore viene incrementato. Non solo: il colore diventa prima nero, poi ancora rosso, ecc.

La pagina dopo qualche caricamento
La pagina dopo qualche caricamento

Per memorizzare il contatore e il colore da visualizzare è stato usato l’oggetto ViewState.

Se guardiamo il codice (viewstate.aspx), vediamo come è stato realizzato:

51     <div id="colore" runat="server" class="risposta"></div>
54     <span class="txt">Il contatore segna <span id="contatore" runat="server" class="txtb"><%=ViewState("count")%></span> volte.</span>

Sopra sono dichiarati due controlli i cui identificativi sono “colore” e “contatore”.

15 <script language="vb" runat="server">
16 Sub Page_Load(sender as Object, e as EventArgs)
17   
18   If ViewState("colore") = "<font color=‘red’><b>Rosso</b></font>" Then
19     colore.InnerHtml = "<font color=‘black’><b>Nero</b></font>"
20     ViewState("colore") = "<font color=‘black’><b>Nero</b></font>"
21   Else
22     colore.InnerHtml = "<font color=‘red’><b>Rosso</b></font>"  
23     ViewState("colore") = "<font color=‘red’><b>Rosso</b></font>"
24   End If
25   
26   If IsNothing(ViewState("count")) Then
27     ViewState("count") = 1            
28   Else
29     ViewState("count") += 1
30   End If
31   
32 End Sub
33 </script>

Questo è il cuore della pagina.

Il ViewState è un contenitore di oggetti. Per prima cosa si verifica se l’oggetto colore (una stringa) è nero, così da farlo diventare rosso: poiché la prima volta non è nero, è visualizzato come rosso.

Il contatore funziona nello stesso modo: se è la prima volta è posto a 1, altrimenti viene incrementato.

Va notato che per utilizzare il ViewState il bottone di submit è incluso in una form di tipo PostBack (con runat=”server”)

56     <form runat="server">
57       <input type="submit" value="Riprova">
58     </form>

Conclusione

La possibilità di introdurre un modello a stati in ASP.NET porta lo sviluppatore verso un compromesso: usare questa funzionalità bilanciando il numero delle comunicazioni tra client/server e il peso della pagina. Il ViewState può inoltre essere programmato, così da facilitare il passaggio di oggetti tra form di tipo PostBack.

Migrare ad ASP.NET, o no?

ASP.NET è una tecnologia completamente diversa da ASP. Le capacità di programmazione richieste per dominare i due linguaggi non sono paragonabili.

Gli sviluppatori Html si sono più volte cimentati con successo nella realizzazione di pagine ASP, magari senza creare codice particolarmente efficiente o riusabile.

Per usare ASP.NET è necessario possedere una solida preparazione in programmazione orientata agli oggetti, visto che è una caratteristica comune a tutti i linguaggi appartenenti alla piattaforma .NET

Al Williams espone i suoi punti di vista in “Is ASP.Net your next Web development platform?” [nuova finestra], un articolo pubblicato da New Architect.

Vi consigliamo di leggere solo l’ultima parte “replace or augment?” e “the decision”. La parte precedente, relativa alle differenze tra ASP e ASP.NET e ai paragoni con JSP, contiene infatti alcune inesattezze.