Pull to refresh

Создание приложения для Windows Phone 7 от начала до конца. Часть 11. Способы хранения данных, использования классов доступа к данным

Development for Windows Phone *
Translation
Original author: Microsoft Developer Guidance team
Предыдущая часть

Данные для вашего приложения, скорее всего, будут получаться из внешнего источника данных. Вашему приложению необходимо будет каким-либо образом сохранять и загружать эти данные.

В этой части вы узнаете:
  • Какие типы данных поддерживаются в Windows Phone.
  • Что использовать для длительного хранения данных в Windows Phone.
  • Как использовать классы доступа к данным для сохранения и загрузки данных.

Типы данных


Windows Phone поддерживает различные типы данных. Данные могут быть следующих видов: данные на уровне страниц, данные на уровне приложения, данные пользовательского ввода, статические данные, полученные из Интернета данные. Кроме того, они могут быть только для чтения, могут быть временными для текущей сессии приложения или сохраняться в хранилище для всех сессий приложения. Данные в вашем приложении может храниться в различных местах. Ваше приложение может загружать данные из следующих мест, а также сохранять данные во все, кроме первого.
Расположение данных Описание Примеры
Файлы ресурсов (resources) и файлы содержимого (content files) Файлы только для чтения, включенные в пакет вашего приложения. Файлы ресурсов загружаются автоматически при загрузке библиотек DLL, которые их содержат. Файлы содержимого загружаются, когда вы обращаетесь к ним. Список столиц государств или фоновое изображение.
Хранящиеся в памяти словари (in-memory state dictionaries) Временное хранилище, использующееся для краткосрочного хранения данных в то время, когда приложение деактивировано. Временное хранилище обладает высокой скоростью, но данные в нём удаляются через несколько минут, так что оно ненадёжно. Дополнительная информация будет представлена в части «Восстановление приложения после дезактивации». Текущий элемент управления, находящийся в фокусе.
Изолированное хранилище (isolated storage) Хранилище, представляющее файловую систему телефона, использующееся для долгосрочного хранения данных между сессиями приложения. Изолированное хранилище обладает низкой скоростью, но является надежным. Выбранный пользователем цвет фона.
Удаленное хранилище (remote storage) Хранилище в облаке или в Интернете, используемое для обмена данными между несколькими приложениями или несколькими экземплярами одного приложения. Удаленное хранилище имеет низкую скорость, асинхронный доступ и иногда бывает недоступно, но обеспечивает наибольшую гибкость. Удаленное хранение данных — это очень обширная тема, которая выходит за рамки данной статьи. Веб-сервис, возвращающий список вин.
С момента, как ваше приложение запускается и работает, существуют различные места, в которые вы можете сохранять и из которых вы можете загружать данные. Например, изолированное хранилище и удаленное хранилище медленные, так что вы должны обращаться к ним (или запускать фоновые потоки (background workers), которые обращаются к ним) в перегрузке (override) метода OnNavigatedTo первой загруженной страницы, а не в обработчиках событий Launching и Activated.

Примечание:
Если операции сохранения и загрузки занимают много времени, вы должны сохранять данные как можно раньше и загружать их как можно позже. Тем не менее, вам следует избегать загрузки данных в обработчиках событий Launching и Activated.

Использование классов доступа к данным


Полезно инкапсулировать код сохранения и получения данных в класс доступа к данным. Например, если вы загружаете данные в перегрузке метода OnNavigatedTo, каждая страница может использовать один и тот же класс доступа к данным. Этот класс может загружать данные при первом обращении и предоставлять кэшированную копию для каждого последующего обращения.

Приложение FuelTracker включает в себя класс доступа к данным с именем CarDataStore, который инкапсулирует весь код, необходимый для сохранения и получения данных. Он включает в себя свойство Car и несколько методов для взаимодействия с данными.

image

Каждая страница приложения Fuel Tracker отображает данные из одного объекта Car, который приложение должно получить из хранилища. Статический класс CarDataStore предоставляет доступ к данным через статическое свойство Car, как показано в следующем фрагменте кода.
  1. private static Car car;
  2. public static Car Car
  3. {
  4.     get
  5.     {
  6.         if (car == null)
  7.         {
  8.             // Initialize the car field using data retrieved from storage
  9.             // or create a new Car object if there is no data in storage.
  10.             // (The code for doing this is shown and described later.)
  11.         }
  12.         return car;
  13.     }
  14.     set { car = value; }
  15. }
* This source code was highlighted with Source Code Highlighter.

Этот код позволяет методу OnNavigatedTo, перегруженному для каждой страницы, получать значение свойства, не обращая внимания на то, были ли данные уже загружены. Например, как было описано в части «Отображение данных», класс FillupPage устанавливает свойство DataContext элемента пользовательского интерфейса в значение свойства CarDataStore.Car. Это представлено в перегруженном методе OnNavigatedTo, как показано в следующем фрагменте кода.
  1. protected override void OnNavigatedTo(NavigationEventArgs e)
  2. {
  3.     base.OnNavigatedTo(e);
  4.  
  5.     CarHeader.DataContext = CarDataStore.Car;
  6.  
  7.     // ... other code ...
  8. }
* This source code was highlighted with Source Code Highlighter.

Следующая часть
Tags:
Hubs:
Total votes 40: ↑21 and ↓19 +2
Views 2.3K
Comments Leave a comment