Comparar opções de armazenamento
- {númeroDeMinutos} minutos
.NET Multi-platform App UI (MAUI) fornece várias opções de armazenamento para armazenar dados em cache localmente em um dispositivo, dependendo da natureza, estrutura e 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 através do acesso ao sistema de arquivos
- Banco de dados: armazena dados em um banco de dados relacional
Nesta unidade, analisamos essas opções de armazenamento e as situações para as quais cada opção é mais adequada.
Quando usar as Preferências
As preferências são convenientes quando você trabalha com dados simples, como seleções de usuários. 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ê queria que o usuário pudesse especificar se o aplicativo deveria salvar seu nome de usuário e senha entre as sessões. Você pode armazenar a escolha do usuário em Preferências.
O código a seguir mostra como armazenar um valor booleano registrado na variável saveLoginDetails para uma preferência chamada SaveLogin e, em seguida, ler posteriormente esses dados de volta. Observe que o Get método 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 Preferences classe também contém métodos para determinar se uma preferência nomeada existe (ContainsKey), excluindo uma preferência (Remove) e removendo todos os dados de preferência (Clear).
Nota
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
Os dispositivos móveis e desktop têm um sistema de arquivos com uma estrutura hierárquica de diretórios 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ê queira armazenar dados de log localmente no dispositivo. Você pode criar um arquivo de texto, salvá-lo no sistema de arquivos e gravar logs nele à medida que os eventos acontecem. Você também pode serializar grandes estruturas de dados em um arquivo e armazená-lo em cache localmente no sistema de arquivos se precisar salvar quando o aplicativo for desligado. Quando a aplicação for reiniciada, poderás reler 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, ler os dados de volta e desserializá-los de volta para a memória mais tarde. Aqui, usamos JSON para o formato de serialização, mas você pode salvar os dados no formato que achar mais adequado à natureza dos dados e aos 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);
Aceder à sandbox da aplicação
Quando você está trabalhando 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. As aplicações .NET MAUI proporcionam a sandbox da aplicação. A sandbox da aplicação é uma área privada com a qual a sua aplicação pode trabalhar. Por padrão, nenhum outro aplicativo pode acessar essa área além do sistema operacional. Você pode acessar a sandbox usando a AppDataDirectory propriedade estática da FileSystem classe.
string path = FileSystem.AppDataDirectory;
Nesse código, a path variável 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 Quando usar o sistema de arquivos.
Nota
A propriedade FileSystem.AppDataDirectory é uma abstração de um caminho específico do dispositivo; corresponde a diferentes pastas no Android, iOS e WinUI3. Essa abstração permite que você escreva código que faça referência à área restrita de uma maneira independente da plataforma na qual ela é executada. Use essa abstração em vez de fazer referência a um caminho específico do dispositivo explicitamente em seu código.
Diretrizes para salvar dados em aplicativos iOS
A Apple tem diretrizes do iOS para onde os arquivos devem ser armazenados. Há dois locais de pasta principais:
A pasta Biblioteca: conforme descrito anteriormente, a
FileSystem.AppDataDirectorypropriedade retorna essa pasta. Use a pasta Biblioteca quando estiver armazenando dados gerados pelo aplicativo.A pasta Documentos: O trecho de código a seguir mostra como fazer referência a essa pasta na
docFoldervariável. 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, 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ê tiver relações entre dados ou quando quiser filtrar os dados ao longo do tempo. Por exemplo: no cenário de mídia social, cada postagem contém dados sobre a postagem, como o carimbo de data/hora e o conteúdo. No entanto, cada post também tem uma relação com um usuário que fez a postagem. Faz sentido representar esta relação numa base de dados para evitar a duplicação de dados entre mensagens e também para 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 sob a AppDataDirectory pasta na área restrita e criar o banco de dados nessa pasta.