Personalizzazione dell'utente con le Profile API di ASP.NET 2.0

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Come funziona l'accesso al profilo

La vera magia delle Profile API è visibile quando si passa al codice, poiché senza conoscere nulla dei meccanismi di memorizzazione si possono recuperare, modificare e salvare i dati con poche righe. In fase di compilazione, ASP.NET crea una classe Profile che deriva da ProfileCommon, ed alla quale aggiunge una proprietà per ogni elemento add dichiarato nel nodo properties del web.config.

In più, avendo specificato il tipo, queste proprietà sono tipizzate, limitando così la possibilità di errori dovuti ad un uso dei dati errati.

Alla classe Page viene aggiunta una proprietà Profile del tipo creato precedentemente, così da rendere possibile l'accesso alle proprietà. La figura 16.6 mostra il risultato che si ottiene con la configurazione vista precedentemente.

Figura 16.6

Figura 16.6 - L'intellisense del Profile all'opera.


Esempio 16.14 - VB
Profile.Skin = "DefaultSkin"
Profile.AlbumPreferito.Titolo = "NomeAlbum"
Dim skin As String = Profile.Skin

Esempio 16.14 - C#
Profile.Skin = "DefaultSkin";
Profile.AlbumPreferito.Titolo = "NomeAlbum";
String skin = Profile.Skin;

Oltre all'accesso tipizzato mostrato nell'esempio 16.14, si può accedere alle proprietà anche tramite collezione, come visibile nell'esempio 16.15.


Esempio 16.15 - VB
Dim skin As String
skin = Profile.GetPropertyValues("Skin").ToString()
Dim titolo As String
Titolo = Profile.GetProfileGroup("AlbumPreferito").GetPropertyValues("Titolo").ToString()

Esempio 16.15 - C#
string skin = Profile.GetPropertyValues("Skin").ToString();
string titolo = Profile.GetProfileGroup("AlbumPreferito").GetPropertyValues("Titolo").ToString();

Quando si configura il provider, per evitare di salvare automaticamente le proprietà ad ogni modifica, queste entrano in uno stato intermedio in cui sono modificate in memoria, ma non nello storage. Per rendere effettive le modifiche si deve utilizzare, come già detto, il metodo Save, mentre per sapere se ci sono proprietà nello stato intermedio, si deve accede alla proprietà IsDirty.

Per completare il discorso, una possibile alternativa alla definizione all'interno del web.config è l'utilizzo di una classe definita in maniera esplicita, da cui poi ASP.NET fa derivare la classe creata a runtime. Questa classe può essere referenziata nel web.config come nell'esempio 16.16.


Esempio 16.16
<profile inherits="MyProfile" />

La classe può essere simile a quella mostrata nell'esempio 16.17.


Esempio 16.17 - VB
Imports System
Imports System.Web.Profile

Public Class MyProfile
  Inherits ProfileBase

    ' Attivazione del supporto per gli utenti anonimi
    <SettingsAllowAnonymous(true)> _
    Public Property Nome() As String
      Get
        Return MyBase("Nome").ToString()
      End Get
      Set
        MyBase("Nome") = value
      End Set
    End Property

End Class

Esempio 16.17 - C#
using System;
using System.Web.Profile;

public class MyProfile : ProfileBase
{
  // Attivazione del supporto per gli utenti anonimi
  [SettingsAllowAnonymous(true)]
  public String Nome
  {
    get { return base["Nome"] as String; }
    set { base["Nome"] = value; }
  }
}

Il vantaggio di questo approccio è che consente di definire in maniera più semplice la classe, senza dover toccare il web.config, caratteristica che in progetti complessi potrebbe risultare molto più comoda.

Il Profile è una feature che aumenta di molto la produttività in quanto ha un tempo di startup molto basso ed un utilizzo molto semplice ma, soprattutto, Type-Safe e Strongly-Typed. Per contro, un utilizzo continuo del sistema di storage può rallentare l'accesso, quindi l'ideale è non salvare tutti i dati ad ogni accesso, ma invocare un salvataggio batch alla fine delle modifiche, utilizzando il metodo Save.

Nota
Il provider di SQL Server salva i valori all'interno di una sola colonna, tenendo in un'altra i delimitatori, così da poter ricostruire i valori corrispondenti. Se questa modalità è molto flessibile, perché consente di utilizzare qualsiasi proprietà, ha lo svantaggio di non prestarsi ad interrogazioni di tipo statistico.
C'è un provider custom per SQL Server, prodotto sempre dal team di ASP.NET, che aggiunge la possibilità di avere una proprietà per ogni colonna della tabella. Esiste anche una variante che utilizza stored procedure. Entrambi si possono scaricare gratuitamente da http://www.asp.net/sandbox/samp_profiles.aspx?tabid=62.

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC