Freigeben über


AgFx = разработка управляемых данными приложений Windows Phone 7

Грэг Дункан

Что за приложения без данных? Каждое приложение должно читать или записывать данные. И мобильные – особенно. Я имею в виду, если это не игра и не приложение-пукалка, то какому же мобильному приложению не требуются данные (и опять, большинство игр получают некоторые элементы данных… и лучшие приложения другого класса размещаются в облаке, социально интегрированы и связаны по данным…)?

Итак, если это колесо, которое нам необходимо, вы должны решить, что должна быть основа, которая поможет нам создавать приложения для Windows Phone 7, интенсивно работающие с данными…

AgFx делает написание приложений Windows Phone, интенсивно работающих с данными, детской игрой!

Я постоянно загружен, работая над тремя приложениями для Windows Phone, которые ОЧЕНЬ активно работают с данными. И с каждым приложением я должен беспокоиться о кешировании данных! Я начал разбираться с AgFx и не оглядываюсь назад! Немного сложно приступить к работе с этим пакетом, но однажды поняв взгляд на мир со стороны данных, вы сможете создавать приложения ОЧЕНЬ БЫСТРО… и наилучшим образом? Железобетонно!!!

...

Прежде чем двигаться дальше, прочтите введение: построение связанных приложений для телефона с помощью AgFx.

Все в мире AgFx вращается вокруг данных, и более точно … данных в веб! Если вы в состоянии получить их с помощью обычного HttpWebReques, вы можете использовать AgFx! Не имеет значения, если ваши данные представлены в форматах RSS/ATOM, OData или исходном XML, – они прекрасно поладят с AgFx!

В моем сценарии требовалось достать данные из твиттера (ATOM), некоторых RSS-фидов (ATOM), клиентских фидов Odata (из SQL Azure) и Flicr… и клеем был AgFx!

Далее Руди демонстрирует, как он использует AgFx с Твиттером;

Я буду использовать Твиттер в этом примере, но он будет работать точно так же и для других источников… Чтобы начать, нам потребуется ViewModel, представляющая твит:

 public class TweetViewModel
 {
     public string From { get; set; }
     public string Text { get; set; }
     public Uri Image { get; set; }
 }

Далее нам потребуется коллекция твитов:

 [CachePolicy(CachePolicy.CacheThenRefresh, 60 * 15)]
 public class TwitterViewModel : ModelItemBase<TwitterLoadContext>
 {
     private BatchObservableCollection<TweetViewModel> tweets = new BatchObservableCollection<TweetViewModel>();
     public BatchObservableCollection<TweetViewModel> Tweets
     {
         get { return tweets; }
         set
         {
             tweets = value;
             RaisePropertyChanged("Tweets");
         }
     }
     #region IDataLoader
     public class TwitterViewModelDataLoader : IDataLoader<TwitterLoadContext>
     {
         private const string TwitterSearchUriFormat = "https://search.twitter.com/search.atom?lang=en&q={0}";
         public LoadRequest GetLoadRequest(TwitterLoadContext loadContext, System.Type objectType)
         {
             string uri = String.Format(TwitterSearchUriFormat, loadContext.Terms, DateTime.Now.Ticks);
             return new WebLoadRequest(loadContext, new Uri(uri));
         }
         public object Deserialize(TwitterLoadContext loadContext, System.Type objectType, System.IO.Stream stream)
         {
             var document = XDocument.Load(stream);
             var feed = SyndicationFeed.Load(document.CreateReader());
             TwitterViewModel vm = new TwitterViewModel { LoadContext = loadContext };
             foreach (var item in feed.Items)
             {
                 TweetViewModel tweet = new TweetViewModel
                 {
                     From = item.Authors.FirstOrDefault().Name,
                     Text = item.Title.Text,
                     Image = (from _ in item.Links
                              where _.MediaType == "image/png"
                              select _).FirstOrDefault().Uri
                 };
                 vm.Tweets.Add(tweet);
             }
             return vm;
         }
     }
     #endregion
 }

Во второй статье Скрытые жемчужины AgFx – PhoneApplicationFrameEx, Руди демонстрирует другую изящную возможность AgFx.

...Одной из скрытых жемчужин пакета является библиотека AgFx.Controls.Phone.dll! Она содержит PhoneApplicationFrameEx… Просто замените ваш старый RootFrame новым PhoneApplicationFrameEx.

...

Теперь вы можете удивиться, почему этот кусок кода классный? Каждый раз при загрузке данных с помощью AgFx (не важно, с какой страницы) на верху страницы появляется индикатор выполнения, показывая пользователю, что данные загружаются и анализируются!

Еще не заинтересовались AgFx? Вот снимок страницы проекта AgFx Windows Phone Application Data Caching Framework.

Добро пожаловать в AgFx – платформу создания приложений для Windows Phone 7. Она существует, поскольку многие приложения для Windows Phone 7 сталкиваются с одинаковыми типами проблем при управлении данными, сохранением приостановленного потока пользовательского интерфейса и оптимизации использования сети. Ее цель – облегчить все эти проблемы, чтобы вы могли сосредоточиться на написании своего приложения.

...

Возможности

  • Автоматическое кеширование и получение данных сетевых запросов
  • Автоматическое определение действителен ли кэш или же новые данные должны быть доставлены
  • Простая схема для создания объектов модели преставления привязанных к данным, основанная на кэшируемых данных
  • Отслеживание экземпляров дает уверенность в том, что все части приложения ссылаются на один и тот же экземпляр – обновление в одном месте обновит данные в других местах
  • Гибкая платформа для определения того, как объекты кэшируются, сколько времени кэш актуален, как управлять неактуальными объектами и т. п.
  • Простая платформа для широковещательных сообщений для приложений
  • Много классов помощников для реализации общих шаблонов в Windows Phone 7
  • Возможности отладки позволяют увидеть, что делает AgFx и взглянуть на производительность работы сети и частей, ответственных за десериализацию в приложении.

Обзор

Вкратце AgFx позволяет описать две вещи, которые нельзя постичь автоматически, а потом делает всё остальное. Есть три момента, которые каждое приложение оперирующее с данными должно описать:

1. Как получить данные. Обычно это URL, но может быть и иной способ

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

3. Как долго данные актуальны, и что делать, когда срок их годности истечет. Другими словами, после какого момента требуется получить новые данные и объявить неактуальными кэшированные данные.

С помощью этой информации, которую надо задать для каждого из объектов, AgFx сможет сделать остальное.

Если вы создаете приложения для Windows Phone 7, связанные с данными и хотите сфокусироваться на своём приложении, а не на организации потоков данных, возможно вы захотите проверить AgFx и позволить ему выполнить сложную работу с данными за вас…

Вот несколько ссылок, которые могут оказаться интересными: