Сравнение вариантов хранилищ
Многоплатформенный пользовательский интерфейс приложения .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
, расположенной в песочнице, и создать в этой папке базу данных.