Partilhar via


Gerenciamento de configurações do aplicativo

Gorjeta

Este conteúdo é um excerto do eBook, Enterprise Application Patterns Using .NET MAUI, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Padrões de aplicativos corporativos usando a miniatura da capa do eBook .NET MAUI .

As configurações permitem a separação de dados que configuram o comportamento de um aplicativo do código, permitindo que o comportamento seja alterado sem reconstruir o aplicativo. Existem dois tipos de configurações: configurações do aplicativo e configurações do usuário.

As configurações do aplicativo são dados que um aplicativo cria e gerencia. Ele pode incluir dados como pontos de extremidade de serviço Web fixo, chaves de API e estado de tempo de execução. As configurações do aplicativo estão vinculadas à funcionalidade principal e só são significativas para esse aplicativo.

As configurações de usuário são as configurações personalizáveis de um aplicativo que afetam o comportamento do aplicativo e não exigem reajustes frequentes. Por exemplo, um aplicativo pode permitir que o usuário especifique onde recuperar dados e como exibi-los na tela.

Criando uma interface de configurações

Embora o gerenciador de preferências possa ser usado diretamente em seu aplicativo, ele vem com a desvantagem de tornar seu aplicativo firmemente acoplado à implementação do gerenciador de preferências. Esse acoplamento significa que a criação de testes de unidade ou a extensão da funcionalidade do gerenciamento de preferências será limitada, uma vez que seu aplicativo não terá uma maneira direta de intercetar o comportamento. Para resolver essa preocupação, uma interface pode ser criada para funcionar como um proxy para o gerenciamento de preferências. A interface nos permitirá fornecer uma implementação que atenda às nossas necessidades. Por exemplo, ao escrever um teste de unidade, podemos querer definir configurações específicas, e a interface nos dará uma maneira fácil de definir consistentemente esses dados para o teste. O exemplo de código a seguir mostra a ISettingsService interface no aplicativo 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; }
}

Adicionando configurações

O .NET MAUI inclui um gerenciador de preferências que fornece uma maneira de armazenar configurações de tempo de execução para um usuário. Esse recurso pode ser acessado de qualquer lugar dentro do seu aplicativo usando a Microsoft.Maui.Storage.Preferences classe. O gerenciador de preferências fornece uma abordagem consistente, segura para tipos e multiplataforma para persistir e recuperar configurações de aplicativos e usuários, enquanto usa o gerenciamento de configurações nativas fornecido por cada plataforma. Além disso, é simples usar a vinculação de dados para acessar os dados de configurações expostos pela biblioteca. Para obter mais informações, consulte as Preferências no Microsoft Developer Center.

Gorjeta

As preferências destinam-se a armazenar dados relativamente pequenos. Se você precisar armazenar dados maiores ou mais complexos, considere usar um banco de dados ou sistema de arquivos local para armazenar os dados.

Nosso aplicativo usará a Preferences classe necessária para implementar a ISettingsService interface. O código abaixo mostra como o aplicativo SettingsService multiplataforma eShop implementa as AuthTokenAccess propriedades e 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 configuração consiste em uma chave privada, um valor padrão privado e uma propriedade pública. A chave é sempre uma cadeia de caracteres const que define um nome exclusivo, com o valor padrão para a configuração sendo um valor estático somente leitura ou constante do tipo necessário. Fornecer um valor padrão garante que um valor válido esteja disponível se uma configuração não definida for recuperada. Esta implementação de serviço pode ser fornecida através de injeção de dependência para a nossa aplicação para utilização em modelos de visualização ou outros serviços em toda a aplicação.

Vinculação de dados às configurações do usuário

No aplicativo multiplataforma eShop, o SettingsView expõe várias configurações que o usuário pode configurar em tempo de execução. Essas configurações incluem permitir a configuração de se o aplicativo deve recuperar dados de microsserviços implantados como contêineres do Docker ou se o aplicativo deve recuperar dados de serviços fictícios que não exigem uma conexão com a Internet. Ao recuperar dados de microsserviços em contêineres, uma URL de ponto de extremidade base para os microsserviços deve ser especificada. A imagem abaixo mostra o SettingsView quando o usuário optou por recuperar dados de microsserviços em contêineres.

Configurações do usuário expostas pelo aplicativo multiplataforma eShop.

A vinculação de dados pode ser usada para recuperar e definir configurações expostas pela ISettingService interface. Isso é conseguido por meio de controles na associação de exibição para exibir propriedades do modelo que, por sua vez, acessam propriedades ISettingService na interface e geram uma notificação de alteração de propriedade se o valor tiver sido alterado.

O exemplo de código a seguir mostra o Entry controle do que permite que o usuário insira uma URL de ponto de extremidade de SettingsView identidade base para os microsserviços em contêiner:

<Entry Text="{Binding IdentityEndpoint, Mode=TwoWay}" />

Esse Entry controle se liga à IdentityEndpoint propriedade da SettingsViewModel classe, usando uma associação bidirecional. O exemplo de código a seguir mostra a IdentityEndpoint propriedade:

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();
        }
    }
}

Quando a IdentityEndpoint propriedade é definida, o UpdateIdentityEndpoint método é chamado, desde que o valor fornecido seja válido. O exemplo de código a seguir mostra o UpdateIdentityEndpoint método:

private void UpdateIdentityEndpoint()
{
    _settingsService.IdentityEndpointBase = _identityEndpoint;
}

Esse método atualiza a IdentityEndpointBase propriedade na implementação da ISettingService interface com o valor de URL do ponto de extremidade base inserido pelo usuário. Se a SettingsService classe for fornecida como a implementação para _settingsService, o valor persistirá para armazenamento específico da plataforma.

Resumo

As configurações permitem a separação de dados que configuram o comportamento de um aplicativo do código, permitindo que o comportamento seja alterado sem reconstruir o aplicativo. As configurações do aplicativo são dados que um aplicativo cria e gerencia, e as configurações do usuário são as configurações personalizáveis de um aplicativo que afetam o comportamento do aplicativo e não exigem reajustes frequentes.

A Microsoft.Maui.Storage.Preferences classe fornece uma abordagem consistente, segura para tipos e multiplataforma para persistir e recuperar configurações de aplicativos e usuários.