> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-7-la-construccion.-accediendo-a-los-datos/configuracion-de-usuario.md).

# Configuración de Usuario

Hemos hablado del modelo de datos y de entidades de negocio, pero también tenemos que hablar de datos de usuario. Es decir, de la información que el usuario habitualmente usará durante el uso de la aplicación, de las preferencias que configurará y de los parámetros que la aplicación utilizará para determinar distintos tipos de eventos u ocurrencias. Como ejemplo de ello, tenemos la preferencia en la ordenación de los listados de tareas, que puede ser por categoría, o por prioridad. En este caso, el usuario establecerá dichas preferencias en una ventana de configuración.

La base de todo ello es un contenedor de configuración de aplicación (“**ApplicationData.Current.LocalSettings**”), que dispone de las siguientes peculiaridades:

* El nombre de cada valor puede tener hasta 255 caracteres como máximo.
* Cada valor puede tener un tamaño máximo de 8 kilobytes
* Cada valor compuesto puede tener un tamaño máximo de 64 kilobytes.

La siguiente clase, “**SettingsHelper**” facilita su uso.

```csharp
public class SettingsHelper
{
    private static ApplicationDataContainer settings = null;
    static SettingsHelper()
    {
        settings = ApplicationData.Current.LocalSettings;
    }
    private static bool Exists(string key)
    {
        return settings.Values.Keys.Contains(key);
    }
    public static void Save(string key, object value)
    {
        if (Exists(key))
            settings.Values[key] = value;
        else
            settings.Values.Add(key, value);
    }
    public static T Load<T>(string key)
    {
        if (Exists(key))
            return (T)settings.Values[key];
        else
            return default(T);
    }
    public static void Remove(string key)
    {
        if (Exists(key))
            settings.Values.Remove(key);
    }
}
```

De manera general, esta clase almacenará entidades de usuario que serán consumidas desde otros proyectos. Concretamente por el servicio “SettingsService”, del proyecto “Shared” y del que ya hablaremos en el capítulo 9.

En este punto el proyecto “InTools” ha alcanzado su primera versión cubriendo todas las utilidades esenciales de cualquier aplicación. A partir de este momento, podremos reutilizar en cualquiera de nuestras aplicaciones futuras. La estructura de clases resultante queda como sigue:

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-1b4180b03ecfc4fd558f1733d07d2941b21fa760%2Fimage23.PNG?alt=media)

**Figura 23.- Estructura de clases del proyecto "InTools"**
