Comparar opções de armazenamento
.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 para uma preferência chamada saveLoginDetails
e, em SaveLogin
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 o aplicativo for reiniciado, você poderá 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. Os aplicativos .NET MAUI fornecem a área restrita do aplicativo. A área restrita do aplicativo é uma área privada com a qual seu aplicativo pode trabalhar. Por padrão, nenhum outro aplicativo pode acessar essa área além do sistema operacional. Você pode acessar a área restrita usando a AppDataDirectory
FileSystem
propriedade static da 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 FileSystem.AppDataDirectory
propriedade é uma abstração de um caminho específico do dispositivo, que é avaliada em 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.AppDataDirectory
propriedade 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
docFolder
variá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.