Administración de la configuración de la aplicación
Sugerencia
Este contenido es un extracto del libro electrónico "Patrones de aplicaciones empresariales con .NET MAUI", disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
La configuración permite la separación de datos que configura el comportamiento de una aplicación desde el código, lo que permite cambiar el comportamiento sin volver a generar la aplicación. Hay dos tipos de configuración: la configuración de la aplicación y la configuración de usuario.
La configuración de la aplicación son datos que crea y administra una aplicación. Puede incluir datos como puntos de conexión fijos de servicio web, claves de API y estado en tiempo de ejecución. La configuración de la aplicación está vinculada a la funcionalidad principal y solo es significativa para esa aplicación.
La configuración del usuario es la configuración personalizable de una aplicación que afecta al comportamiento de la aplicación y no requiere un reajuste frecuente. Por ejemplo, una aplicación podría permitir al usuario especificar dónde recuperar datos y cómo mostrarlos en la pantalla.
Crear una interfaz de configuración
Aunque el administrador de preferencias se puede usar directamente en la aplicación, tiene el inconveniente de que hace que la aplicación esté estrechamente acoplada a la implementación del administrador de preferencias. Este acoplamiento significa que la creación de pruebas unitarias o la ampliación de la funcionalidad de administración de preferencias será limitada, ya que la aplicación no tendrá una manera directa de interceptar el comportamiento. Para solucionar este problema, se puede crear una interfaz para que funcione como proxy para la administración de preferencias. La interfaz nos permitirá proporcionar una implementación que se adapte a nuestras necesidades. Por ejemplo, al escribir una prueba unitaria, es posible que deseemos establecer una configuración específica y la interfaz nos proporcionará una manera fácil de establecer de forma coherente estos datos para la prueba. En el ejemplo de código siguiente, se muestra la interfaz ISettingsService
de la aplicación multiplataforma eShop:
namespace eShop.Services.Settings;
public interface ISettingsService
{
string AuthAccessToken { get; set; }
string AuthIdToken { get; set; }
bool UseMocks { get; set; }
string IdentityEndpointBase { get; set; }
string GatewayShoppingEndpointBase { get; set; }
string GatewayMarketingEndpointBase { get; set; }
bool UseFakeLocation { get; set; }
string Latitude { get; set; }
string Longitude { get; set; }
bool AllowGpsLocation { get; set; }
}
Adición de valores
.NET MAUI incluye un administrador de preferencias que permite almacenar la configuración del entorno de ejecución de un usuario. Se puede acceder a esta característica desde cualquier lugar de la aplicación mediante la clase Microsoft.Maui.Storage.Preferences
. El administrador de preferencias proporciona un enfoque coherente, con seguridad de tipos y multiplataforma para conservar y recuperar la configuración de las aplicaciones y los usuarios, al tiempo que utiliza la administración de configuración nativa de cada plataforma. Además, es sencillo usar el enlace de datos para acceder a los datos de configuración expuestos por la biblioteca. Para obtener más información, consulte Preferencias en el Centro para desarrolladores de Microsoft.
Sugerencia
Las preferencias están pensadas para almacenar datos relativamente pequeños. Si necesita almacenar datos más grandes o más complejos, considere la posibilidad de usar una base de datos local o un sistema de archivos para almacenar los datos.
Nuestra aplicación usará la clase Preferences
necesaria para implementar la interfaz ISettingsService
. En el código siguiente, se muestra cómo el valor de SettingsService
de la aplicación multiplataforma eShop implementa las propiedades AuthTokenAccess
y UseMocks
:
public sealed class SettingsService : ISettingsService
{
private const string AccessToken = "access_token";
private const string AccessTokenDefault = string.Empty;
private const string IdUseMocks = "use_mocks";
private const bool UseMocksDefault = true;
public string AuthAccessToken
{
get => Preferences.Get(AccessToken, AccessTokenDefault);
set => Preferences.Set(AccessToken, value);
}
public bool UseMocks
{
get => Preferences.Get(IdUseMocks, UseMocksDefault);
set => Preferences.Set(IdUseMocks, value);
}
}
Cada configuración consta de una clave privada, un valor predeterminado privado y una propiedad pública. La clave siempre es una cadena const que define un nombre único, siendo el valor predeterminado para la configuración un valor estático de solo lectura o constante del tipo requerido. Proporcionar un valor predeterminado garantiza que un valor válido esté disponible si se recupera un ajuste no establecido. Esta implementación del servicio se puede proporcionar a través de la inserción de dependencias en nuestra aplicación para su uso en modelos de vista u otros servicios en toda la aplicación.
Enlace de datos a la configuración del usuario
En la aplicación multiplataforma eShop, el elemento SettingsView
expone varios valores que el usuario puede configurar en tiempo de ejecución. Estas opciones incluyen permitir la configuración de si la aplicación debe recuperar datos de microservicios implementados como contenedores Docker o si la aplicación debe recuperar datos de servicios ficticios que no requieren conexión a Internet. Al recuperar datos de microservicios en contenedores, se debe especificar una dirección URL de punto de conexión base para los microservicios. En la imagen siguiente se muestra settingsView cuando el usuario ha elegido recuperar datos de microservicios en contenedores.
El enlace de datos se puede usar para recuperar y establecer la configuración expuesta por la interfaz ISettingService
. Esto se logra mediante controles en el enlace de vista para ver las propiedades del modelo que, a su vez, acceden a las propiedades de la interfaz ISettingService
y generan una notificación de cambio de propiedad si el valor ha cambiado.
En el ejemplo de código siguiente se muestra el control Entry
del valor SettingsView
que permite al usuario escribir una dirección URL de punto de conexión de identidad base para los microservicios en contenedores:
<Entry Text="{Binding IdentityEndpoint, Mode=TwoWay}" />
Este control Entry
se enlaza a la propiedad IdentityEndpoint
de la clase SettingsViewModel
utilizando un enlace bidireccional. En el código de ejemplo siguiente se muestra la propiedad IdentityEndpoint
:
private readonly ISettingsService _settingsService;
private string _identityEndpoint;
public SettingsViewModel(
ILocationService locationService, IAppEnvironmentService appEnvironmentService,
IDialogService dialogService, INavigationService navigationService, ISettingsService settingsService)
: base(dialogService, navigationService, settingsService)
{
_settingsService = settingsService;
_identityEndpoint = _settingsService.IdentityEndpointBase;
}
public string IdentityEndpoint
{
get => _identityEndpoint;
set
{
SetProperty(ref _identityEndpoint, value);
if (!string.IsNullOrWhiteSpace(value))
{
UpdateIdentityEndpoint();
}
}
}
Cuando se establece la propiedad IdentityEndpoint
, se llama al método UpdateIdentityEndpoint
, siempre que el valor proporcionado sea válido. El siguiente ejemplo de código muestra el método UpdateIdentityEndpoint
:
private void UpdateIdentityEndpoint()
{
_settingsService.IdentityEndpointBase = _identityEndpoint;
}
Este método actualiza la propiedad IdentityEndpointBase
en la implementación de la interfaz ISettingService
con el valor de dirección URL del punto de conexión base especificado por el usuario. Si la clase SettingsService
se proporciona como implementación de _settingsService
, el valor se conservará en el almacenamiento específico de la plataforma.
Resumen
La configuración permite la separación de datos que configura el comportamiento de una aplicación desde el código, lo que permite cambiar el comportamiento sin volver a generar la aplicación. La configuración de la aplicación son datos que una aplicación crea y administra, y la configuración del usuario es la configuración personalizable de una aplicación que afecta al comportamiento de la aplicación y no requiere un reajuste frecuente.
La clase Microsoft.Maui.Storage.Preferences
proporciona un enfoque coherente, con seguridad de tipos y multiplataforma para conservar y recuperar la configuración de la aplicación y del usuario.