Сравнение вариантов хранилищ

Завершено

Многоплатформенный пользовательский интерфейс приложения .NET (MAUI) предоставляет несколько вариантов хранения для кэширования данных локально на устройстве в зависимости от природы, структуры и размера данных. Ниже перечислены три наиболее популярных варианта для локального хранения данных в .NET MAUI.

  • Параметры: сохраняет данные в парах "ключ — значение".
  • Файловая система: хранит свободные файлы непосредственно на устройстве через доступ к файловой системе
  • База данных: сохраняет данные в реляционной базе данных.

Схема общих вариантов локального хранилища, доступных приложению .NET MAUI.

В этом уроке мы рассмотрим эти варианты хранения и ситуации, для которых наиболее подходящий вариант.

Когда следует использовать параметры

Параметры удобны при работе с простыми фрагментами данных, такими как выбор пользователей. Они часто используются для разрешения пользователям настраивать приложение. Эти данные хранятся в наборе пар "ключ — значение". Для примера предположим, что вы хотите предоставить пользователю возможность выбора, будет ли приложение сохранять имя пользователя и пароль между сеансами. Вы можете сохранить выбор пользователя, используя режим Параметры.

В следующем коде показано, как сохранить логическое значение, записанное в saveLoginDetails переменной, в предпочитаемый параметр SaveLogin, а затем прочитать эти данные обратно. Обратите внимание, что метод Get ожидает получить значение по умолчанию на случай, если указанный параметр не будет найден:

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

Этот класс Preferences также содержит методы для проверки существования именованного параметра (ContainsKey), удаления параметра (Remove) и удаления всех данных о параметрах (Clear).

Примечание.

В формате параметров следует хранить только простые типы данных. В них нельзя хранить ссылки на большие объекты, например списки, коллекции или массивы. Для данных такого типа используйте файловую систему или базу данных.

Когда следует использовать файловую систему

В мобильных и настольных устройствах существует файловая система с иерархической структурой файлов и папок. Файловую систему удобно использовать, если у вас есть свободные файлы, например XML, двоичные или текстовые файлы. Предположим, вы хотите хранить данные журнала локально на устройстве. Вы можете создать текстовый файл, сохранить его в файловую систему и записывать в него журналы, когда происходят события. Вы также можете сериализовать большие структуры данных в файл и кэшировать их в локальной файловой системе, например, если нужно сохранить все данные при завершении работы приложения. После перезапуске приложения вы сможете считать эти данные в память. В следующем коде показаны примеры сериализации данных в файл, сохранения этого файла, а затем считывания данных и последующей десериализации их обратно в память. Здесь мы используем JSON для формата сериализации, но вы можете сохранить данные в любом формате, который вы считаете наиболее подходящим для характера данных и требований к безопасности приложения.

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

Доступ к песочнице приложения

При работе с свободными файлами, такими как XML-файлы, необходимо хранить их в подходящем расположении в файловой системе. Некоторые из этих данных могут быть конфиденциальными, и вы не хотите сохранить его в расположении, где другие приложения или пользователи могут легко получить к нему доступ. Приложения .NET MAUI предоставляют песочницу приложения. Песочница приложения — это частная область, с которой может работать ваше приложение. По умолчанию другие приложения, кроме операционной системы, не имеют доступа к этой области. Доступ к песочнице можно получить с помощью AppDataDirectory статического свойства FileSystem класса:

string path = FileSystem.AppDataDirectory;

В этом коде path переменная содержит путь к файлу в расположение, в котором можно хранить файлы для используемого приложения. Данные можно считывать и записывать в файлы в этой папке, используя методы, показанные в разделе "Когда используется файловая система ".

Примечание.

Свойство FileSystem.AppDataDirectory предоставляет абстракцию пути для конкретного устройства, и его значение обозначает разные папки в Android, iOS и WinUI3. Эта абстракция позволяет писать код, который ссылается на песочницу таким образом, чтобы она не зависела от платформы, на которой она выполняется. Используйте эту абстракцию, а не явным образом ссылаться на путь для конкретного устройства в коде.

Рекомендации по сохранению данных в приложениях iOS

У Apple есть рекомендации для iOS, касающиеся места хранения файлов. Существуют два главных расположения папок.

  • Папка библиотеки: как описано ранее, FileSystem.AppDataDirectory свойство возвращает эту папку. Используйте папку библиотеки при хранении данных, созданных приложением.

  • Папка "Документы": в следующем фрагменте кода показано, как ссылаться на эту папку в переменнойdocFolder. В папке Документы должны храниться только данные, созданные пользователем. Эти данные создаются в прямом ответе на действие пользователя. Например, если вы создали приложение для редактирования текста, например Microsoft Word, вы сохраните документ в папке "Документы".

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

Когда следует использовать базу данных

Локальную базу данных целесообразно использовать тогда, когда у вас есть связи между данными или вам нужно фильтровать данные за определенные периоды. Например, в сценарии социальных сетей каждая запись содержит данные о записи, например метку времени и содержимое. Но также каждая публикация связана с пользователем, разместившим ее. Можно представить эту связь в базе данных, чтобы не дублировать данные в разных публикациях, и повысить эффективность поиска данных.

База данных SQLite представляет собой файл, который необходимо сохранить в соответствующем месте. В идеале следует создать папку в папке AppDataDirectory, расположенной в песочнице, и создать в этой папке базу данных.

1.

Предположим, вы создаете приложение .NET MAUI для iOS, которое позволяет пользователям создавать музыку. Вы хотите, чтобы пользователи могли сохранять свою работу в файл и продолжать работу даже после перезапуска приложения. В какую папку нужно сохранять файл в песочнице приложения в iOS?

2.

Предположим, вы хотите сохранить небольшой объем данных, чтобы он был доступен между запусками приложения. Какой вариант хранения данных лучше выбрать?