Porównanie opcji magazynu

Ukończone

Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (MAUI) udostępnia wiele opcji magazynowania do buforowania danych lokalnie na urządzeniu, w zależności od charakteru, struktury i rozmiaru danych. Trzy najczęściej używane opcje przechowywania danych lokalnie w aplikacji .NET MAUI to:

  • Preferencje: przechowuje dane w parach klucz-wartość
  • System plików: przechowuje luźne pliki bezpośrednio na urządzeniu za pośrednictwem dostępu do systemu plików
  • Baza danych: przechowuje dane w relacyjnej bazie danych

Diagram typowych opcji magazynu lokalnego dostępnych dla aplikacji .NET MAUI.

W tej lekcji przyjrzymy się tym opcjom magazynowania i sytuacjom, dla których każda opcja jest najbardziej odpowiednia.

Kiedy należy używać preferencji

Preferencje są wygodne podczas pracy z prostymi fragmentami danych, takimi jak wybór użytkownika. Są one często używane do zezwalania użytkownikom na konfigurowanie aplikacji. Te dane są przechowywane jako zestaw par klucz/wartość. Załóżmy na przykład, że chcesz, aby użytkownik mógł określić, czy aplikacja powinna zapisać swoją nazwę użytkownika i hasło między sesją. Możesz przechowywać wybrane przez użytkownika w obszarze Preferencje.

Poniższy kod pokazuje, jak zapisać wartość logiczną zarejestrowaną w zmiennej saveLoginDetails do preferencji o nazwie SaveLogin, a następnie później odczytać te dane z powrotem. Zwróć uwagę, że Get metoda oczekuje podania wartości domyślnej, jeśli określona preferencja nie zostanie znaleziona:

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

Klasa Preferences zawiera również metody określania, czy istnieje nazwana preferencja (ContainsKey), usuwanie preferencji (Remove) i usuwanie wszystkich danych preferencji (Clear).

Uwaga

Jako preferencje należy przechowywać tylko proste typy danych. Nie można przechowywać odwołań do dużych obiektów, takich jak listy, kolekcje i tablice. W przypadku tego typu danych użyj systemu plików lub bazy danych.

Kiedy należy używać systemu plików

Urządzenia przenośne i stacjonarne mają system plików z hierarchiczną strukturą katalogów folderów i plików. Wygodne jest użycie systemu plików, gdy masz luźne pliki, takie jak PLIKI XML, binarne lub tekstowe. Załóżmy na przykład, że chcesz przechowywać dane dziennika lokalnie na urządzeniu. Możesz utworzyć plik tekstowy, zapisać ten plik w systemie plików i zapisać w nim dzienniki w miarę wystąpienia zdarzeń. Można również serializować duże struktury danych w pliku i buforować je lokalnie w systemie plików, jeśli chcesz zapisać, gdy aplikacja zostanie zamknięta. Po ponownym uruchomieniu aplikacji możesz ponownie odczytać te dane z powrotem do pamięci. Poniższy kod przedstawia przykłady serializacji danych do pliku i zapisywania tego pliku, a następnie odczytywania danych z powrotem i deserializacji ich z powrotem do pamięci później. W tym miejscu używamy formatu JSON dla formatu serializacji, ale dane można zapisać w odpowiednim formacie, który jest najbardziej odpowiedni dla charakteru danych i wymagań dotyczących zabezpieczeń aplikacji.

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

Uzyskiwanie dostępu do piaskownicy aplikacji

Podczas pracy z luźnymi plikami, takimi jak pliki XML, należy je przechowywać w odpowiedniej lokalizacji w systemie plików. Niektóre z tych danych mogą być poufne i nie chcesz zapisywać ich w lokalizacji, w której inne aplikacje lub użytkownicy mogą łatwo uzyskiwać do nich dostęp. Aplikacje MAUI platformy .NET zapewniają piaskownicę aplikacji. Piaskownica aplikacji to prywatny obszar, w którym aplikacja może działać. Domyślnie żadne inne aplikacje nie mogą uzyskiwać dostępu do tego obszaru innego niż system operacyjny. Dostęp do piaskownicy można uzyskać przy użyciu AppDataDirectory właściwości statycznej FileSystem klasy:

string path = FileSystem.AppDataDirectory;

W tym kodzie zmienna path zawiera ścieżkę pliku do lokalizacji, w której można przechowywać pliki do użycia przez aplikację. Dane można odczytywać i zapisywać w plikach w tym folderze, korzystając z technik przedstawionych w sekcji Kiedy używać systemu plików.

Uwaga

Właściwość FileSystem.AppDataDirectory jest abstrakcją ścieżki specyficznej dla urządzenia. Ocenia ona różne foldery w systemach Android, iOS i WinUI3. Ta abstrakcja umożliwia pisanie kodu odwołującego się do piaskownicy w sposób niezależny od platformy, na której jest uruchamiany. Użyj tej abstrakcji, a nie odwoływania się do ścieżki specyficznej dla urządzenia jawnie w kodzie.

Wskazówki dotyczące zapisywania danych w aplikacjach systemu iOS

Firma Apple ma wytyczne dla systemu iOS dotyczące miejsca przechowywania plików. Istnieją dwie główne lokalizacje folderów:

  • Folder Biblioteka: zgodnie z FileSystem.AppDataDirectory wcześniejszym opisem właściwość zwraca ten folder. Użyj folderu Biblioteka podczas przechowywania danych generowanych przez aplikację.

  • Folder Dokumenty: poniższy fragment kodu pokazuje, jak odwoływać się do tego folderu w zmiennejdocFolder. Użyj folderu Dokumenty, aby przechowywać tylko dane generowane przez użytkownika. Te dane są tworzone bezpośrednio w odpowiedzi na akcję użytkownika. Jeśli na przykład tworzysz aplikację do edycji tekstu, taką jak Microsoft Word, dokument będzie przechowywany w folderze Dokumenty.

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

Kiedy należy używać bazy danych

Dobrym pomysłem jest użycie lokalnej bazy danych w przypadku relacji między danymi lub filtrowania danych w czasie. Na przykład: w scenariuszu mediów społecznościowych każdy wpis zawiera dane dotyczące wpisu, takie jak sygnatura czasowa i zawartość. Jednak każdy wpis ma również relację z użytkownikiem, który dokonał wpisu. Warto przedstawić tę relację w bazie danych, aby zapobiec duplikowaniu danych między wpisami, a także zwiększyć wydajność wyszukiwania danych.

Baza danych SQLite jest plikiem i musisz przechowywać ją w odpowiednim miejscu. W idealnym przypadku należy utworzyć folder w AppDataDirectory folderze w piaskownicy i utworzyć bazę danych w tym folderze.

1.

Załóżmy, że tworzysz aplikację .NET MAUI dla systemu iOS, która umożliwia użytkownikom tworzenie muzyki. Chcesz, aby użytkownicy mogli zapisywać swoją pracę w pliku, aby mogli ponownie uruchomić aplikację i kontynuować pracę w miejscu, w którym odeszli. W piaskownicy aplikacji systemu iOS zapiszesz ten plik w którym folderze?

2.

Załóżmy, że chcesz przechowywać mały fragment danych, aby był dostępny między uruchomieniem aplikacji. Która opcja magazynu danych jest najbardziej odpowiednia?