Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Dettagli tecnici su HappySign...le firme dinamiche

Inganno il tempo che mi rimane qui al lavoro per illustrare un attimo come ho intenzione di implementare la feature di firma dinamica nel mio HappySign. La classe Sign è il fulcro di tutto: essa contiene proprietà come Name, Author, Category, Dynamic e Code (oltre a diverse altre che adesso non interessano).
Quella che ci riguarda è proprio quest'ultima, Code.

Se Dynamic = false, allora Code contiene banalmente una string. Questa string è quella che viene trascinata o incollata. Niente di più semplice. Già testato.

Se Dynamic = true, le cose si fanno più complesse. Se la firma è dinamica, devo associargli una classe contenente codice .NET che viene eseguito a run-time per calcolare il valore reale del parametro. Quindi, facciamo un esempio. Supponiamo di aver creato una firma/decorazione "Random Number : {0}". Questa è una firma dinamica: quando trascina questa firma, l'utente si aspetta di trovare nell'applicazione di destinazione qualcosa come "Random Number : 694543", oppure "Random Number : 98". Non so a cosa possa servire una decorazione di questo tipo, ma è solo un esempio.

Che codice .NET devo scrivere?
Cominciamo subito col dire che HappySign è realizzato interamente in C#. La classe per le firme dinamiche deve essere scritta obbligatoriamente in VB.NET. E' una questione che mi sono auto-imposto, così mescolo C# e Vb.NET. Volendo, tecnicamente, posso usare anche C#. Tutto utilizza il nuovo framework 2.0.
Ho definito una semplice interfaccia ISignParameter, formata da un solo metodo:

public interface ISignParameter
{
    
string GetValueParameter(int Index);
}

La classe DEVE implementare questa interfaccia. Il parametro Index serve per calcolare i valori di tutti i parametri presenti nella firma dinamica. Quindi, ad esempio, nell'editor di script incluso in HappySign è possibile definire una classe come:

Public Class RandomNumber
    
Implements ISignParameter

    
Public Function GetValueParameter(Index As IntegerAs String Implements ISignParameter.GetValueParameter
        
Dim Ret As Integer
        
'...
        '...        Calcolo un numero random
        '...
        
Return(Ret.ToString())
    
End Function

End Class

Ovviamente, ho volutamente omesso la parte di calcolo del numero random. Se il codice è scritto bene, la classe può fare di tutto: connettersi ad un web-services, leggere files, calcolare qualcosa, interfacciarsi con altri programmi esterni, andare sul web, fare assolutamente di tutto. L'importante è che venga rispettata l'interfaccia ISignParameter. Il nome, in questo caso RandomNumber, è assolutamente libero, non deve rispettare alcun vincolo particolare.

Attenzione: il metodo GetValueParameter viene chiamato tante volte quanti sono i parametri della firma dinamica. Se scrivo una cosa del genere:

"Now I listen : {0},
Duration : {1},
Year {2}"

I parametri sono ben 3. Quindi, GetValueParameter viene chiamata 3 volte. La prima volta, deve restituire una string per calcolare {0}, la seconda volta calcola {1}, l'ultima volta calcola {2}. Ho già fatto delle prove e devo dire che è proprio carino.  Io nella mia classe "scriptata" (oddio, che termine!!) ho messo un bel Select Case e ho chiamato metodi privati della classe, così il codice è più leggibile e pratico.

Sono sicuro che potrei scontrarmi con qualche dettaglio tecnico che adesso mi sfugge; ad esempio, ho già visto che le tecniche per eseguire/compilare classi a run-time sono diverse se create con VB2003 piuttosto che con VS2005. Purtroppo non ricordo bene, ma alcune classi/metodi/proprietà sono definite come obsolete. Vedrò di utilizzare il nuovo framework appieno.

powered by IMHO 1.2

Print | posted on venerdì 4 novembre 2005 19:35 |

Feedback

Gravatar

# re: Dettagli tecnici su HappySign...le firme dinamiche

ciao Igor!
rispondo in breve adesso, poi magari farò un post dedicato, che è meglio...

1) lo script lo puoi scrivere dentro HappySign in VB.NET (non hai scampo!!!). Questo nel caso tu debba fare script semplici...
2) puoi aggiungere reference, ci sto lavorando

altrimenti, puoi creare un assembly separato (deve ereditare dalla mia classe Sign e fare l'overloading di GetSign()). Questo può servire nel caso in cui:
- vuoi scrivere codice .NET "complesso"
- vuoi nascondere il codice che hai scritto
- il codice contiene username/pwd che non vuoi far vedere nel codice "in chiaro"

la DLL prodotta la devi mettere in una dir specifica di HappySign, che lui si legge all'avvio, così anche il punto (3) è risolto.

domani vedrò di essere più chiaro, dipendentemente da come mi va domani mattina!!!
:-)
04/11/2005 22:38 | Igor Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET