Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Visual Studio LightSwitch: utilizzare gli extension methods con VB 2010

Come noto, Visual Studio LightSwitch permette lo sviluppo rapido di applicazioni business utilizzando la filosofia Data + Screens = Business Applications. Questo tipo di approccio da un lato facilita notevolmente la creazione di applicazioni anche da parte di sviluppatori meno esperti, dall'altro sacrifica in qualche modo le possibilità di personalizzazione di alcuni aspetti delle applicazioni.

In realtà, le applicazioni LightSwitch sono a tutti gli effetti applicazioni .NET che girano sulla piattaforma di Silverlight 4, per cui è possibile, con qualche trucchetto, utilizzare moltissime delle conoscenze già acquisite in ambito .NET, come ad esempio gli extension methods. Per esempio, supponiamo di avere una banalissima entità chiamata Contact, che rappresenti un nostro contatto, la quale esponga una proprietà WebSite di tipo String, che vada a memorizzare l'indirizzo del sito Web del nostro contatto:

Ipotizziamo, poi, di voler implementare una regola di validazione personalizzata per accertarci che il sito immesso abbia una forma valida. Tra le tante possibilità (regular expression, API ecc.) per fini dimostrativi si può utilizzare il metodo System.Uri.IsWellFormedUriString, che restituisce True nel caso in cui dalla string ricevuta sia possibile costruire un Uri valido. Quindi nella finestra delle proprietà facciamo clic su Custom Validation e attiviamo l'editor di codice Visual Basic, nel quale andiamo a gestire l'evento Validate in questo semplice modo:

        Private Sub WebSite_Validate(ByVal results As EntityValidationResultsBuilder)
            ' results.AddPropertyError("")
            If Me.WebSite IsNot Nothing AndAlso System.Uri.
                IsWellFormedUriString(Me.WebSite, UriKind.Absolute) = False Then
                results.AddPropertyError("The supplied Uri seems not to be valid")
            End If
        End Sub

Tralasciando alla vostra curiosità il verificare come la regola di validazione venga intercettata nell'interfaccia, facciamo un passaggio successivo. Vogliamo rendere il codice più elegante aggiungendo al tipo String un extension method che faccia la verifica dell'Uri e questo, come sapete, in Visual Basic si fa attraverso un modulo (in C# con una classe statica). La developer experience in LightSwitch è differente da quella in cui siamo abituati in Visual Studio 2010, per cui non è possibile aggiungere nuovi file di codice al progetto a meno di due trucchi:

  • attivare l'editor di codice e definire il modulo (o una classe, se ci serve questo tipo di elemento) all'interno di un file di codice esistente, come Contact.vb nel nostro esempio. Dopo tutto, i file di codice .NET possono contenere molteplici definizioni di oggetto e LightSwitch non è da meno
  • in Solution Explorer passare dalla Logical View alla File View utilizzando l'apposito pulsante, evidenziare la cartella Common\User Code e aggiungere lì, tramite il classico Add New Item, il file di codice desiderato. In questa Beta 1 è possibile aggiungere solo file di testo o classi, per cui se ci serve un modulo dovremo poi fare la modifica a mano.

Ipotizzando il primo scenario, che è quello più semplice, nel file Contact.vb (che dovrebbe essere ancora aperto dopo l'aggiunta della regola di validazione personalizzata), aggiungiamo il seguente modulo:

    Module Extensions
        Extension()>
        Function IsValidWebAddress(ByVal webAddress As StringAs Boolean
            Return System.Uri.IsWellFormedUriString(webAddress, UriKind.Absolute)
        End Function
    End Module

Ottimo! il compilatore interpreta correttamente il nuovo codice e rende disponibile il nuovo extension method al tipo String. Infatti, possiamo ora riscrivere la precedente regola di validazione come segue:

        Private Sub WebSite_Validate(ByVal results As EntityValidationResultsBuilder)
            ' results.AddPropertyError("")
            If Me.WebSite IsNot Nothing AndAlso Me.WebSite.IsValidWebAddress = False Then
                results.AddPropertyError("The supplied Uri seems not to be valid")
            End If
        End Sub

Il codice in questo modo è decisamente più elegante e leggibile, inoltre abbiamo dato dimostrazione di come sia possibile fare uso nelle applicazioni LightSwitch di conoscenze esistenti della programmazione .NET ed apportare quel "valore aggiunto" che fa la differenza anche in un framework con molte linee fisse.

Alessandro

Print | posted on giovedì 4 novembre 2010 12:49 | Filed Under [ Visual Basic Visual Studio LightSwitch ]

Powered by:
Powered By Subtext Powered By ASP.NET