Profiles

Los profiles son una de las funcionalidades prefabricadas que vienen con ASP.NET 2.0 que cuando las conoces ya no puedes vivir sin ellas.

Con los profiles vamos a poder definir propiedades a nuestros usuarios, sin más que rellenar un sencillo XML en nuestro Web.Config. Y es aplicable tanto a usuarios registrados como a usuario anónimos.

Por ejemplo, podríamos querer almacenar el número de veces que un usuario ha visitado nuestra página, su cumpleaños o el tamaño de letra que prefiere para leer nuestros textos. Realmente el límite está en la imaginación del webmaster y de su aplicación.

Hasta ahora teníamos dos métodos para tal menester, o bien fabricábamos una base de datos con todas esas características o bien usábamos las cookies. Ambas opciones pueden ser válidas en algunos escenarios, pero tienen sus problemas:

Usando una base de datos...
Si nos creáramos nuestra base de datos tendríamos un soporte fiable, pero también deberíamos invertir una mayor cantidad de tiempo. Sobretodo si quisiéramos alcanzar la facilidad de uso de los profiles, pues habríamos de crear la BBDD con sus procedimientos almacenados, su capa DAL y si capa BLL. Además, si quisiéramos aumentar/disminuir la cantidad de propiedades de cada usuario, se traduciría en otro extra de nuestro preciado tiempo.

Usando cookies...
Si lo hiciéramos con cookies, la facilidad con que guardaríamos los datos sería inmediata (ver artículo sobre cookies en ASP.NET), pero no sería tan sencillo de usar como con profiles (más tardería veremos el porqué) y obviamente mucho menos fiable y efectivo. Menos fiable porque cualquier usuario puede elegir borrar sus cookies o ni siquiera activarlas. Y menos efectivo porque esas propiedades del usuario no serían propiamente del usuario, sino del navegador con que accede el usuario. Si el usuario cambia de ordenador o simplemente de navegador, sus propiedades no se mantendrían.

Por tanto, usemos profiles!!
Como en tantas otras cosas con ASP.NET, los profiles eliminan las desventajas y se quedan con las ventajas... incluso les añaden más! Con los profiles:
1.- Tenemos un soporte fiable (la info se guarda en un BBDD, aunque para nosotros sea tranparente.
2.- Se guardan los datos tan fácilmente como se le da valor a una variable
3.- La cantidad de propiedades de usuario se pueden quitar y añadir en cualquier momento sin más que borrar o escribir unas pocas líneas de XML.
4.- Sirve tanto para usuario registrados como para usuarios anónimos. En caso de ser usuario registrado, la info que le guardemos la podremos acceder esté donde esté. En caso de usuarios anónimos, tenemos las mismas limitaciones de las cookies: sólo accederemos a su info si accede desde el mismo lugar y navegador.
5.- Acceder a los datos es también muy sencillo, pues tenemos el soporte de intellisense. Y es que para nosotros, las características de nuestros usuarios, los profiles, no serán más que "variables globales" que podremos acceder desde cualquier lugar de nuestro código.

Queremos ejemplos! Quereeeemos ejemplos!
Pero vale ya de palabrería, ¿No? Un ejemplo vale más que mil palabras, así que vamos a plantear el siguiente escenario, en el que queremos que de nuestros usuarios podamos almacenar las siguientes características:
- Su fecha de cumpleaños
- La cantidad de visitas que ha hecho a la web
- Su sexo (Me refiero a "masculino o femenino" no a "mucho o poco"  )

Por tanto, lo primero que debemos hacer es definir el siguiente fragmento XML dentro de nuestro web.config:

        <profile enabled="true">
                <properties>
                    <add name="Sexo" defaultValue=""/>
                    <add name="Visitas" type="int" defaultValue="1"/>
                    <add name="Cumple" type="System.DateTime"/>
                </properties>
        </profile>


Sí, así de simple. Vemos que en las propiedades definimos un nombre, el tipo de datos (por defecto es un string), y si lo deseamos un valor por defecto.

En cuanto a lo de recoger o grabar valores de las propiedades de usuario... más fácil imposible:

        Profile.Sexo = "Masculino";

        Profile.Visitas = Profile.Visitas + 1;
        // O como con cualquier otra variable int
        // Profile.Visitas += 1;
        // Profile.Visitas++;

        Profile.Cumple = new DateTime(1981, 8, 14);
        Label1.Text = Profile.Cumple.ToShortDateString();


Y ya está. ASP.NET hace el resto: guardarlo en base de datos, enlazar al usuario con sus profiles correspondientes (bien sea un usuario registrado o un usuario anónimo), genera al vuelo la clase Profile con las propiedades que le hemos especificado, etc.


Perfecto, ¿es eso todo?
No ni mucho menos, muchas cosas quedan por decir de los profiles, pero por hoy ya tenemos bastante. En la próxima entrega estudiaremos aspectos y características algo más avanzadas.