Comparar opções de armazenamento

Concluído

O .NET MAUI fornece várias opções de armazenamento para armazenar dados em cache localmente em um dispositivo, dependendo da natureza, da estrutura e do tamanho dos dados. As três opções mais usadas para armazenar dados localmente em um aplicativo .NET MAUI são:

  • Preferências: Armazena dados em pares chave-valor
  • Sistema de arquivos: Armazena arquivos soltos diretamente no dispositivo por meio do acesso ao sistema de arquivos
  • Banco de dados: armazena dados em um banco de dados relacional

Diagram of the common local storage options available to a .NET MAUI app.

Nesta unidade, você examinará essas opções de armazenamento e as situações em que cada uma delas é mais apropriada.

Quando usar preferências

As preferências são convenientes ao se trabalhar com dados simples, como seleções de usuário. Eles geralmente são usados para permitir que os usuários configurem o aplicativo. Você armazena esses dados como um conjunto de pares chave-valor. Por exemplo, suponha que você deseja que o usuário possa especificar se o aplicativo deve salvar o nome de usuário e senha dele entre sessões. Você pode armazenar a escolha do usuário nas Preferências.

O código a seguir mostra como armazenar um valor booliano registrado na variável saveLoginDetails em uma preferência nomeada SaveLogin e, em seguida, ler esses dados novamente. Observe que o método Get espera que você forneça um valor padrão se a preferência especificada não for encontrada:

bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);

A classe Preferences também contém métodos para determinar se existe uma preferência nomeada (ContainsKey), excluir uma preferência (Remove) e remover todos os dados de preferência (Clear).

Observação

Você só deve armazenar tipos de dados simples como preferências. Não é possível armazenar referências a objetos grandes, como listas, coleções e matrizes. Para esse tipo de dados, use o sistema de arquivos ou um banco de dados.

Quando usar o sistema de arquivos

Dispositivos móveis e desktop têm um sistema de arquivos com uma estrutura de diretórios hierárquica de pastas e arquivos. É conveniente usar o sistema de arquivos quando você tem arquivos soltos, como XML, binário ou arquivos de texto. Por exemplo, suponha que você deseja armazenar dados de log localmente no dispositivo. Você pode criar um arquivo de texto, salvar esse arquivo sistema de arquivos e gravar logs nele conforme os eventos acontecerem. Você também pode serializar estruturas de dados grandes em um arquivo e armazená-lo em cache localmente no sistema de arquivos se precisar salvar quando o aplicativo for desligado. Quando o aplicativo for reiniciado, você poderá ler novamente esses dados na memória. O código a seguir mostra exemplos de serialização de dados em um arquivo e salvamento desse arquivo e, em seguida, a leitura dos dados de volta e a desserialização deles na memória. Aqui, usamos JSON para o formato de serialização, mas você pode salvar os dados em qualquer formato que achar mais apropriado para a natureza dos dados e os requisitos de segurança do aplicativo.

using System.Text.Json;
using System.IO;

// Data to be written to the file system, and read back later
List<Customer> customers = ...;

// Serialize and save
string fileName = ...;
var serializedData = JsonSerializer.Serialize(customers);
File.WriteAllText(fileName, serializedData);
...

// Read and deserialize
var rawData = File.ReadAllText(fileName);
customers = JsonSerializer.Deserialize<List<Customer>>(rawData);

Acessar a área restrita do aplicativo

Ao trabalhar com arquivos soltos, como arquivos XML, você precisa armazená-los em um local adequado no sistema de arquivos. Alguns desses dados podem ser confidenciais e você não deseja salvá-los em um local onde outros aplicativos ou usuários possam acessá-los facilmente. Os aplicativos .NET MAUI fornecem a área restrita do aplicativo. A área restrita do aplicativo é uma área privada com a qual seu aplicativo pode funcionar. Por padrão, nenhum outro aplicativo pode acessar essa área que não seja o sistema operacional. Você pode acessar a área restrita usando a propriedade estática AppDataDirectory da classe FileSystem:

string path = FileSystem.AppDataDirectory;

Nesse código, a variável path contém o caminho do arquivo para o local onde você pode armazenar arquivos para o aplicativo usar. Você pode ler e gravar dados em arquivos nesta pasta usando as técnicas mostradas na seção Como usar o sistema de arquivos.

Observação

A propriedade FileSystem.AppDataDirectory é uma abstração de um caminho específico do dispositivo e é avaliada como pastas diferentes no Android, no iOS e no WinUI3. Essa abstração permite que você escreva um código que referencie a área restrita de uma maneira independente da plataforma na qual ela é executada. Use essa abstração em vez de referenciar explicitamente um caminho específico do dispositivo em seu código.

Diretrizes para salvar dados em aplicativos iOS

A Apple tem diretrizes de iOS para o local em que os arquivos devem ser armazenados. Há dois locais de pasta principais:

  • A pasta Biblioteca: Essa pasta é retornada pela propriedade FileSystem.AppDataDirectory, conforme descrito anteriormente. Use a pasta Biblioteca quando estiver armazenando dados gerados pelo aplicativo.

  • A pasta Documentos: O snippet de código a seguir mostra como referenciar essa pasta na variável docFolder. Use a pasta Documentos para armazenar apenas dados gerados pelo usuário. Esses dados são criados em resposta direta a uma ação do usuário. Por exemplo, se você estivesse criando um aplicativo de edição de texto, como o Microsoft Word, você armazenaria o documento na pasta Documentos.

    string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    

Quando usar um banco de dados

É uma boa ideia usar um banco de dados local quando você tem relações entre dados ou quando quer filtrar os dados ao longo do tempo. Por exemplo: no cenário de redes sociais, cada postagem contém dados sobre ela, como o carimbo de data/hora e o conteúdo. No entanto, cada postagem também tem uma relação com um usuário que criou a postagem. Faz sentido representar essa relação em um banco de dados para impedir a duplicação de dados entre postagens e também melhorar a eficiência da pesquisa de dados.

Um banco de dados SQLite é um arquivo e você precisa armazená-lo em um local apropriado. Idealmente, você deve criar uma pasta na pasta AppDataDirectory na área restrita e criar o banco de dados nessa pasta.

1.

Suponha que você esteja criando um aplicativo .NET MAUI para iOS que permite que os usuários criem músicas. Você quer que os usuários possam salvar seu trabalho em um arquivo para que possam reiniciar o aplicativo e continuar trabalhando do ponto em que pararam. Na área restrita de um aplicativo iOS, em que pasta você salvaria este arquivo?

2.

Suponha que você queira armazenar um pequeno pedaço de dados para que seja acessível entre inicializações do aplicativo. Qual opção de armazenamento de dados é a mais adequada?