asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 3355
ASPCode.it - Store

  > > Articoli

Usare classi VBScript nelle applicazioni ASP

Data di pubblicazione: 22/06/2001        Voto della community: 4,13 (Votanti: 20)


Ci sono molte ragioni per cui un'applicazione ASP può beneficiare dei vantaggi della programmazione Object Oriented.
Lo scopo di questo articolo è dimostrare come le classi VBScript danno la possibilità ad uno sviluppatore, di usufruire di questi vantaggi, quando per una qualsiasi ragione non risulta conveniente usare classi compilate.

Molte applicazioni ASP possono essere migliorate utilizzando i principi della programmazione ad oggetti e utilizzando la tecnologia COM.
Queste pratiche danno la possibilità di migliorare l'applicazione dal punto di vista della riusabilità del codice, della sua semplificazione e facilitazione nella gestione di eventuali future modifiche.
Normalmente gli oggetti COM vengono sviluppati in Visual Basic, per una serie di ragioni: il codice viene compilato, le variabili vengono dichiarate e le prestazioni generali dell'applicazione sono migliori di quelle ottenibili con VBScript.
Comunque, ci sono dei casi in cui non è molto pratico o addirittura impossibile incorporare oggetti COM compilati nelle applicazioni ASP.
Le ragioni possono essere le seguenti:

1. Limitazioni imposte dall'ambiente di sviluppo o di pubblicazione.
Se si sta sviluppando un'applicazione ASP che verrà pubblicata su un ISP il quale non permette di registrare DLL, non si avrà la possibilità di incorporare oggetti COM nel codice. Questo può essere fastidioso se si è abituati a sviluppare una buona parte del codice in Visual Basic o C++.

2. Stadio di Prototipazione o Sviluppo dell'applicazione.
Molte volte quando si sviluppa un'applicazione ASP, si ha bisogno di creare un prototipo di essa prima di svilupparne la versione finale pubblicabile, per avere la possibilità di effettuare eventuali modifiche, richieste ad esempio, dal titolare dell'azienda in cui lavorate, o da un cliente. A questo punto dello sviluppo, non è pratico avere un'applicazione che per buona parte comprende oggetti in codice compilato. Inoltre quando si sta sviluppando l'architettura ed il flusso dell'applicazione, può essere molto più semplice e veloce scrivere codice usando gli script invece che un linguaggio come VB.

3. Mancanza di esperienza con VB o con i principi della programmazione orientata agli oggetti. Programmare un'applicazione ASP usando gli oggetti COM VB può essere un compito estremamente scoraggiante se precedentemente si è programmato esclusivamente usando linguaggi di scripting il che rende infamiliare con gli ambienti IDE.

In questo articolo, proponiamo una soluzione solo a queste situazioni (perchè comunque in tutti gli altri casi è conveniente utilizzare oggetti COM), oltre fare una breve panoramica su alcuni degli oggetti che sono comunemente usati nelle applicazioni ASP. Per finire esamineremo un'applicazione di esempio sviluppata per dimostrare i principi discussi.

Quando non risulta pratico utilizzare oggetti COM, c'è un modo per incorporare i principi dello sviluppo Object Oriented nelle applicazioni ASP. Questo è ottenibile usando classi create in VBScript, una nuova caratteristica presente nella versione 5.0 di questo linguaggio di scripting. VBScript 5.0, parte di IE 5 è anche scaricabile dal sito WEB di Microsoft all'indirizzo: http://msdn.microsoft.com/scripting/vbscript/download/vbsdown.htm. Nonostante le classi create in VBScript non abbiano le stesse prestazioni delle corrispondenti create con VB, danno comunque la possibilità di usufruire dei vantaggi offerti dalla programmazione Object Oriented.

Esse consentono inoltre uno sviluppo rapido usando un linguaggio di scripting non compilato, che velocizza la prototipazione e la pianificazione delle applicazioni, si possono sviluppare classi usando l'editor di testi preferito, anzichè imparare ad utilizzare un ambiente IDE, e non per ultimo, se non si possiede la capacità di registrare DLL sul server di sviluppo, basta fare l'upload dello script di classe senza preoccuparsi assolutamente di nessuna registrazione. Altra ottima cosa, è che al momento di convertire una classe creata con VBScript in un vero oggetto COM, è sufficente eseguire un semplice processo di taglia e incolla del codice, nel progetto VB DLL e dichiarare le variabili in esso utilizzate.

Benefici dei principi della programmazione Object Oriented

Ci sono molte ragioni per cui un'applicazione ASP può beneficiare dei vantaggi della programmazione Object Oriented. Lo scopo di questo articolo è dimostrare come le classi VBScript danno la possibilità ad uno sviluppatore, di usufruire di questi vantaggi, quando per una qualsiasi ragione non risulta conveniente usare classi compilate, e non di essere una completa discussione dei miglioramenti ottenibili nello sviluppo utilizzando i principi dell'Object Oriented.

Dati incapsulati nelle classi e relativi metodi
Classi ben costruite danno la possibilità di un maggior controllo sui dati dell'applicazione. Per dati intendiamo le variabili che l'applicazione manipola. Avremo la possibilità di impacchettare e controllare l'uso di questi dati nelle classi. Uno dei vantaggi ovvii derivanti da questa possibilità è la semplificazione del processo di debbugging.

Scalabilità del codice
L'incapsulamento del codice di un'applicazione in classi, rende la sua distribuzione scalabile più semplicemente, se ad esempio, come spesso accade, aumenta il numero di richieste per l'applicazione. Per esempio, un'applicazione ASP che usa classi VBScript per contenere la maggior parte della logica di programma, può essere facilmente convertita in classi VB COM e MTS per supportare un maggior numero di utenti.

Riusabilità del codice
Probabilmente la miglior ragione per incorporare i principi della costruzione Object Oriented in un'applicazione ASP e il riutilizzo del codice attraverso più pagine e più applicazioni. I linguaggi Object Oriented adottano l'ereditarietà come metodo che consente il riutilizzo del codice. Visto che VBScript non supporta l'ereditarietà, il riutilizzo è ottenuto mediante inclusione ASP. Questo consente ad una classe singola di essere condivisa da più pagine ASP.

Tipi di classi

Generalmente ci sono tre tipi di classi da cui un'applicazione può trarre vantaggio. Sono categorie molto ampie, e sicuramente le classi che svilupperete cadono in una di esse.

1 - Classi di utilità
Queste forniscono uno specifico insieme di funzionalità. Normalmente, incapsulano le routine che vengono usate più di frequente nel codice. L'ovvio vantaggio ottenuto utilizzando queste classi è dato dal poterle scrivere una sola volta ed utilizzarle nello stesso modo un numero infinito di volte. Un esempio di questo tipo di classe è quella contenuta nel file clsDALayer.asp (scaricabile alla fine di questo articolo). Questa classe possiede tre funzioni, RetrieveRS, ExecuteQuery e SaveRS. Queste funzioni incapsulano il 99% del codice per l'accesso ai dati che normalmente viene usato in un'applicazione ASP. Usando questa classe si può scrivere codice ADO una sola volta ed usarlo centinaia di volte.

Dal punto di vista della programmazione, è notevolmente migliore includere le funzionalità comuni in una classe di utilità. Per esempio, non bisogna mai inserire tutte le routines comuni dell'applicazione in un'unica classe, ma separarle in gruppi di funzioni che abbiano tra loro una relazione. Alcuni esempi di classi di utility possono essere:

  • Classi per l'accesso ai dati
  • Classi contenenti routines di Parsing delle stringhe
  • Classi che manipolano i coockies

2 - Classi commerciali
Classi commerciali o oggetti commerciali, rappresentano entità commerciali del mondo reale. Esse generalmente contengono dati appartenenti a entità commerciali, così come i metodi per manipolarli. Una delle strade più comuni per la creazione di un oggetto commerciale è incapsulare una riga dalla tabella del relativo DB nella classe. Nell'applicazione d'esempio presentata, ci sono tre oggetti commerciali, la classe Contact, la Job e la Location. Ognuna di esse contiene delle procedure Property Get e Let, che espongono i dati contenuti dall'oggetto, ed il metodo Load che li carica nell'oggetto dal DB.

3 - Classi di insiemi
Queste classi contengono un insieme di uno specifico tipo di classe. Per esempio, una classe di un insieme di Persone contiene un insieme di oggetti Persona. Non è lo scopo di questo articolo quello di andare in profondità in merito all'uso delle classi di insiemi, dato che VBScript è un linguaggio non compilato, l'utilizzo delle classi di insiemi può diventare molto pesante in termini di risorse server.

Usare classi VBScript

Vediamo brevemente come progettare, creare ed usare le classi in VBScript. Le classi in Visual Basic sono singoli files con estensione .cls che sono normalmente parte di un progetto DLL ActiveX o EXE. In VBScript, le classi possono essere definite nei loro stessi files o come parte di uno script più grande. Ma per avere la possibilità di usarle in più pagine ASP, è conveniente utilizzarle dividendole in files singoli.
Come con gli oggetti VB COM, le classi VBScript non devono essere instaziate a livello Applicazione o Sessione. Infatti, se si tenta di referenziare una classe VBScript nell'oggetti Session o Application in IIS, verrà generato un'errore.

La sintassi per una classe VBScript è relativamente semplice. Per creare una classe, bisogna utilizzare il seguente schema:

<%

Class NomeClasse

  'Definire le proprietà

  'Definire i metodi


End Class

%>

Ogni cosa contenuta tra le istruzioni Class e End Class costituisce la classe stessa. Questa può consistere di Metodi e Proprietà sia privati che pubblici. Similmente a Visual Basic, se un metodo non viene dichiarato esplicitamente come privato, la sua definizione sarà pubblica. Anche l'istruzione property è come la corrispondente in VB, le procedure Property Let/Set assegnano un valore alla proprietà mentre le procedure Property Get ne prelevano il valore.

Ci sono due eventi che possono essere intercettati dalle procedure evento in una classe VBScript, l'evento Class_Initialize e l'evento Class_Terminate. Proprio come in VB, il codice scritto in queste procedure di evento, verranno eseguite rispettivamente nel momento in cui la classe viene viene creata e quando la classe viene settata a Nothing, ecco come l'evento Class_Initialize è implementato.

<%

Private Sub Class_Initialize()

  'Inserire qui il codice da eseguire

End Sub

%>

Dopo essere stata definita, la classe VBScript deve essere istanziata usando la keyword NEW in questa maniera:

<%

Set objVariable = NEW ClassName

%>

Infine, per implementare effettivamente la classe VBScript in un'applicazione ASP, è preferibile definire ciscuna classe in un file separato. Questo file può essere poi incluso quando occorre in una pagina ASP usando la direttiva include file:

<!--#include file="clsContact.asp"-->

Per uno sviluppatore di componenti VBScript, le classi sono relativamente semplici da sviluppare ed implementare nelle applicazioni ASP.

L'applicazione Job Post

Descrizione

L'applicazione di esempio inclusa in questo articolo dimostra l'uso delle classi VBScript ed è un sito per la ricerca del lavoro. Consente di trova un lavoro che rispetta dei criteri di ricerca.

Essa consiste in tre pagine ASP principali, jobsearch.asp che consente all'utente di costruire una ricerca, joblist.asp che mostra tutti i lavori che corrispondono alla ricerca e jobdetail.asp che mostra i dettagli di un lavoro specifico. Queste pagine ASP sono più piccole dei template HTML nei quali le classi VBScript sono state incluse per fornire i dati e le elaborazioni necessarie per mostrare correttamente gli elementi dinamici delle pagine. Le direttive include si trovano verso l'inizio dello script come mostrato qui di seguito:

<%@ LANGUAGE="VBSCRIPT"%>
<%
Option Explicit
%>
<!--#Include file="includes/clsDALayer.asp"-->
<!--#Include file="includes/clsJob.asp"-->

Le classi che sono incluse vengono create prima che qualsiasi altro codice ASP venga scritto. Le loro funzione e i loro metodi vengono poi richiamati, eliminando così la maggior parte degli script inseriti nelle pagine.

<%
Dim objJP
Set objJP = New Job
Call objJP.Load(Request.QueryString("job"))
%>

Modello ad oggetti

Il modello ad oggetti dell'applicazione Job Post è relativamente semplice. Andiamo ad esaminare i differenti tipi di classi in essa usati usati.

Classi di utilità

Ci sono tre classi di utilità incorporati in questo progetto, due sono specifici per esso. La classe GetLookups possiede tre funzioni che creano delle liste <selelct> di opzioni per la ricerca prelevando i dati dal DB e una classe Search, che costruisce la query SQL usata per cercare il tipo di lavoro richiesto. La terza, la classe DALayer, è una generica classe di utilità che incapsula le funzionalità ADO per l'accesso ai dati che vengono usate più di frequente nelle applicazioni ASP.

Diamo un'occhiata al modo in cui la classe GetLookups è costruita. Inizia con una normale dichiarazione di classe, seguita dalle diachiarazioni delle funzioni:

<%
Class GetLookups

Private Sub Class_Initialize()
  Set gobjData = New DALayer
  gobjData.ConnectionString = TRIM(Application("ConnectionString"))
End Sub

Private Sub Class_Terminate()
  If IsObject(gobjData) Then Set gobjData = Nothing
End Sub

Public Sub WriteLocation()
  'Implementa il codice per creare la lista <select>
  'dei valori di ricerca dal Data Base
End Sub

End Class
%>

Come è possibile vedere, questa è una semplice classe che contiene solo un metodo e i due gestori di evento Initialize e Terminate. Il suo unico scopo è creare una lista SELECT di valori per la ricerca dal Data Base. E' un esempio tipico di codice perfettamente candidato ad essere incapsulato in una classe da utilizzare quando c'è la necessità di creare la stessa lista <select> di selezione in diverse pagine. Usando questa classe, si ha la possibilità di scrivere il codice in un solo file e richiamarlo da qualsiasi pagina dell'applicazione, in questa maniera, considerando scontato il fatto che il file contenente la classe sia già stato incluso nella pagina ASP:

<SELECT name="location" size="7" multiple>
  <%
  Dim objJP
  Set objJP = New GetLookups
  objJP.WriteLocation
  %>

</SELECT>

Queste routines ci consentono di immagazzinare i valori del campo, in questo caso Rate, nella variabile private gstrRate. La procedura Property Let aggiorna questa variabile mentre la Property Get ne restituisce il valore corrente. L'uso delle procedure Property ci consente di sottoporre i dati associati ad un oggetto commerciale in un formato semplice da utilizzare.

Gli oggetti commerciali

L'applicazione contiene anche tre oggetti commerciali, sono le classi che usano le procedure Property Get/Let per sottoporre un record dalla tabella relativa nel database. Per esempio, se si volesse scrivere il codice seguente per ciascun campo del database:

<%
Public Property Get Rate
  'Sostituire con il nome del campo attuale
  Rate = gstrRate
End Property

Public Property Let Rate(strRate)
  gstrRate = strRate
End Property
%>

Queste routines ci consentono di memorizzare il valore del campo, in questo caso Rate, nella variabile Private gstrRate. La procedura Property Let aggiorna questa variabile, mentre la Property Get estrae il suo valore corrente. L'uso delle procedure Property ci consente di sottoporre i dati associati con un oggetto commerciale in un formato semplice da utilizzare.

Gli oggetti commerciali sono correlati in una struttura gerarchica che ha come oggetto più in alto la classe Job, contenente un istanza di entrambe le classi: Location e Contact, che sono accessibili tramite le procedure Property Get. Ciò consente all'utente di creare la classe Job e poi accedere a tutto ciò che è in essa contenuto, inclusi la sua locazione e le informazione dettagliate sui contatti.

Quando, i dati iniziali vengono caricati nelle variabili che vengono sottoposte dalle procedure property? Ogni oggetto commerciale contiene un suo metodo Load che generalmente accetta un parametro, dato dal valore dell' ID corrispondente alla riga del DB da caricare. Questo metodo usa la classe DALayer per connettersi al data base e estrarre i dati dell'oggetto, per poi caricarli nelle sue variabili. Ora l'oggetto è pronto per essere utilizzato.

Anche se stiamo utilizzando questo oggetto commerciale solo per sottoporre un record a un data base, normalmente potrebbe servire di aggiungere altri metodi come ad esempio Save o ApplyEdit alla sua classe facendo in modo che si possano editare i suoi dati tramite le procedure property e poi salvarli aggiornati di nuovo nel data base.

Conclusioni

Quando si utilizzano i principi dello sviluppo Object Oriented nelle applicazioni ASP, quasi sempre si adottano degli oggetti COM sviluppati in Visual Basic o C++. Comunque sicuramente ci si troverà di fronte a casi in cui questi sono poco pratici da adottare o addirittura impossibili da utilizzare a causa ad esempio dei tempi di sviluppo ristretti o a limitazioni dell'ambiente stesso di sviluppo. In queste situazioni, le classi VBScript offrono un ottimo compromesso tra gli oggetti COM e il puro codice VBScript. Mentre non sono sempre appropriate per gli ambienti che richiedono ad alte prestazioni, le classi create in VBScript offrono molti dei vantaggi dello sviluppo Object Oriented senza dover uscire dall'ambiente di sviluppo tipico delle applicazioni ASP.

Scarica il codice di esempio di questo articolo.




Utenti connessi: 3355