Мобильные ОС?
Разрабатывать ли подМобильные Windows?
Рост доли WP по странам за 2012 год         Россия:                2.0% → 5.9%    ×2.95         Италия:                5.4...
Успехи WP    • В ряде стран доля рынка WP перешагнула 10%    • Доля рынка WP превысила долю BlackBerry в 26      странах  ...
Прогноз роста доли           11.4%WP к 2016                      2.6%http://www.idc.com/
Рынок Desktop OS (апрель 2013)                    1. Windows 7:                   44.73%                    2. Windows XP:...
Динамика роста доли Windows 8                3,5                                      3,17                  3             ...
Разрабатывать ли подМобильные Windows?
Разрабатывать ли подМобильные Windows?   Да.
К р о с с п л ат ф о р м е н н а я р аз р а б от к а д л я     м о б и л ь н ы х п л ат ф о р м W i n d o w s       Вадим ...
ТерминологияWindows Phone (WP):• Windows Phone 7.5/7.8 (WP7)• Windows Phone 8 (WP8)
Терминология•   Windows 8 (Win8)•   Store Apps•   Metro Apps•   Modern Apps•   Windows RT
Мобильные .net платформы
Общее подмножество API                   Portable Class                   Library
Преимущества единого проекта+ Единая реализация бизнес логики+ Единый функционал+ Единый UX (при разном UI)+ Меньшее сумма...
Недостатки единого проекта– Повышенная сложность в начале проекта– Более сложная архитектура– Компромиссные решения по фун...
MVVM
Основы MVVM View     ViewModel    Model• Model – объект данных• View – представление данных в UI• ViewModel – действия с д...
Основы MVVM  View      ViewModel   Model   Как         Что                        Что?выглядит?    делает?
Расширенная MVVM             ViewModel View                         Model           (Business Logic)                      ...
Получение письма               ViewModel  View                          Model             (Business Logic)                ...
Получение письма              ViewModel  View                         Model            (Business Logic)                   ...
Получение письма        Объект-письмо в памяти                ViewModel View                            Model             ...
Получение письмаДоп. обработка (обертка HTML) и уведомление UI                   ViewModel       View                     ...
Получение письмаОтображение пользователю: компоновка, стили, анимации                       ViewModel           View      ...
Пометка флагом   Пользователь нажимает на флаг              ViewModel View                          Model            (Busi...
Пометка флагом           Срабатывает команда                 ViewModel View                             Model             ...
Пометка флагом     Меняется состояние объекта               ViewModel View                           Model             (Bu...
Пометка флагом               ViewModel  View                          Model             (Business Logic)                  ...
Пометка флагом               ViewModel View                           Model             (Business Logic)                  ...
Разделение компонентов MVVMЗависимые компоненты:   Независимые компоненты:• Views                 • Models• Low Level Func...
Кроссплатформеная MVVM    View      ViewModel   Model                           Data   LowLevel                          H...
Структура решения         View                            Зависимые проекты                           ViewModelsWP7.x     ...
КРОССПЛАТФОРМЕННЫЙ MVVM
ViewModelBaseViewModel должна уметь уведомлять UI             ViewModelBase  View                            ViewModel    ...
СпискиДля списков используйте ObservableCollection                           Add                                   Item   ...
CommandBaseUI должен уметь управлять ViewModel             CommandBase  View                       ViewModel              ...
Data HandlersData Handlers – функции обработки данных:• Преобразуют сырые данные в модели.• Пребразуют изменения моделей в...
Data Handlers: сетьРабота с данными из сети:• Обработка полученных данных, парсинг  JSON, формирование моделей.• Подготовк...
Data Handlers: хранилищеРабота с локальным хранилищем:• Обработка данных загруженных с диска,  десериализация, формировани...
Low Level функцииLow Level функции – платформозависимыефункции, которые работают с самыминизкоуровневыми структурами данны...
Как определить Low Level функции?К низкоуровневым функциям нужно отнеститу минимальную функциональность, которуюнельзя сде...
Low Level функции: примерыНепосредственная передача данных по сети:• Отправка запроса• Получение данныхНепосредственная ра...
ПЛАТФОРМОЗАВИСИМЫЕКОМПОНЕНТЫ
Платформозависимые компоненты•   Работа с http.•   Работа с локальным хранилищем.•   Работа с хранилищем настроек.•   Дисп...
Http• Библиотека портируемых классов содержит  классы HttpRequest и HttpWebRequest.• Всю работу с web-сервисами можно  пол...
HttpClient• .net для Win8 имеет класс HttpClient,  который поддерживает сжатие трафика и  обеспечивает более удобную работ...
Локальное хранилище• WP7: IsolatedStorageFile.GetUserStoreForApplication();• Store Apps: ApplicationData.Current.LocalFold...
Локальное хранилище• Создать интерфейс ILocalStorage, в котором  определить базовые функции работы с  хранилищем: void Sav...
Настройки• WP7: IsolatedStorageSettings.ApplicationSettings;• Store Apps: ApplicationData.Current.LocalSettings;• WP8? Iso...
Настройки WP8• Проекты для WP8 и Windows Store имеют  класс ApplicationData.Current.LocalSettings;• Однако на WP8 он не ре...
ДиспетчерДиспетчер необходимо использовать, когдаизменение данных, произошедшие в фоновыхпотоках нужно отобразить в интерф...
Неявная диспетчеризация            Вызов диспетчераBG Thread                  UI Thread               Data LowLevel       ...
Явная диспетчеризация                           Вызов диспетчера                    BG Thread                     UI Threa...
Явная диспетчеризация• Во ViewModelLocator определяем свойство: public Action<Action> DoDispatched { get; }• Это свойство ...
Явная диспетчеризация: пример• Инициализация WP7: DoDispatched = action =>     Dispatcher.BeginInvoke(action);• Инициализа...
Явная диспетчеризация: примерИспользование:       DoDispatched(() =>       {          …       }
Платформозависимые компонентыДля большинства приложений работающих соблаком достаточно следующего:• Фабрика сетевых запрос...
Можно ли разрабатыватьодновременно под WP и Win8?
Можно ли разрабатыватьодновременно под WP и Win8?      Нужно.
Спасибо!Появились вопросы?
Вадим Балашов           разработчик,департамент Мобильных приложений      balashov@corp.mail.ru
Balashov
Upcoming SlideShare
Loading in …5
×

Balashov

461 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
461
On SlideShare
0
From Embeds
0
Number of Embeds
103
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Balashov

  1. 1. Мобильные ОС?
  2. 2. Разрабатывать ли подМобильные Windows?
  3. 3. Рост доли WP по странам за 2012 год Россия: 2.0% → 5.9% ×2.95 Италия: 5.4% → 13.1% ×2.43 Великобритания: 3.0% → 6.7% ×2.23 Австралия: 1.7% → 3.4% ×2.00 США: 2.7% → 4.1% ×1.52 Германия: 6.3% → 6.7% ×1.06Kantar WorldPanel (Взято с hi-tech.mail.ru)
  4. 4. Успехи WP • В ряде стран доля рынка WP перешагнула 10% • Доля рынка WP превысила долю BlackBerry в 26 странах • Доля рынка WP превысила долю iOS в 7 странахhttp://www.idc.com/ (оценивается кол-во проданных устройств)
  5. 5. Прогноз роста доли 11.4%WP к 2016 2.6%http://www.idc.com/
  6. 6. Рынок Desktop OS (апрель 2013) 1. Windows 7: 44.73% 2. Windows XP: 38.73% 3. Windows Vista: 4.99% 4. Windows 8: 3.31% 5. Mac OS X 10.8: 2.65% … 8. Linux: 1.17%http://www.netmarketshare.com/ (оценивается кол-во обращений к поисковым машинам)
  7. 7. Динамика роста доли Windows 8 3,5 3,17 3 2,67 2,5 2,26 2 1,72 1,5 1,09 Доля, % 1 0,41 0,5 0 Окт Ноя Дек Янв Фев Марhttp://www.netmarketshare.com/ (оценивается кол-во обращений к поисковым машинам)
  8. 8. Разрабатывать ли подМобильные Windows?
  9. 9. Разрабатывать ли подМобильные Windows? Да.
  10. 10. К р о с с п л ат ф о р м е н н а я р аз р а б от к а д л я м о б и л ь н ы х п л ат ф о р м W i n d o w s Вадим Балашов (balashov@corp.mail.ru)
  11. 11. ТерминологияWindows Phone (WP):• Windows Phone 7.5/7.8 (WP7)• Windows Phone 8 (WP8)
  12. 12. Терминология• Windows 8 (Win8)• Store Apps• Metro Apps• Modern Apps• Windows RT
  13. 13. Мобильные .net платформы
  14. 14. Общее подмножество API Portable Class Library
  15. 15. Преимущества единого проекта+ Единая реализация бизнес логики+ Единый функционал+ Единый UX (при разном UI)+ Меньшее суммарное время разработки
  16. 16. Недостатки единого проекта– Повышенная сложность в начале проекта– Более сложная архитектура– Компромиссные решения по функционалу
  17. 17. MVVM
  18. 18. Основы MVVM View ViewModel Model• Model – объект данных• View – представление данных в UI• ViewModel – действия с данными
  19. 19. Основы MVVM View ViewModel Model Как Что Что?выглядит? делает?
  20. 20. Расширенная MVVM ViewModel View Model (Business Logic) DataLowLevel Handler
  21. 21. Получение письма ViewModel View Model (Business Logic) DataLowLevel HandlerПолучение массива байт по сети (JSON)
  22. 22. Получение письма ViewModel View Model (Business Logic) DataLowLevel HandlerПарсинг JSON, инициализация объекта
  23. 23. Получение письма Объект-письмо в памяти ViewModel View Model (Business Logic) DataLowLevel Handler
  24. 24. Получение письмаДоп. обработка (обертка HTML) и уведомление UI ViewModel View Model (Business Logic) Data LowLevel Handler
  25. 25. Получение письмаОтображение пользователю: компоновка, стили, анимации ViewModel View Model (Business Logic) Data LowLevel Handler
  26. 26. Пометка флагом Пользователь нажимает на флаг ViewModel View Model (Business Logic) DataLowLevel Handler
  27. 27. Пометка флагом Срабатывает команда ViewModel View Model (Business Logic) DataLowLevel Handler
  28. 28. Пометка флагом Меняется состояние объекта ViewModel View Model (Business Logic) DataLowLevel Handler
  29. 29. Пометка флагом ViewModel View Model (Business Logic) Data LowLevel HandlerФормируется запрос на установку флага
  30. 30. Пометка флагом ViewModel View Model (Business Logic) DataLowLevel Handler Запрос передается на сервер
  31. 31. Разделение компонентов MVVMЗависимые компоненты: Независимые компоненты:• Views • Models• Low Level Functions • ViewModels • Business Logic • Data Handlers
  32. 32. Кроссплатформеная MVVM View ViewModel Model Data LowLevel Handler Зависимые проекты Портируемые пр-ты
  33. 33. Структура решения View Зависимые проекты ViewModelsWP7.x Портируемые пр-ты LowLevel Связывание Ссылки ViewWP8 Models LowLevelStore ViewApps Data Handler LowLevel
  34. 34. КРОССПЛАТФОРМЕННЫЙ MVVM
  35. 35. ViewModelBaseViewModel должна уметь уведомлять UI ViewModelBase View ViewModel INotifyPropertyChanged
  36. 36. СпискиДля списков используйте ObservableCollection Add Item Item Insert Item View Item Item Remove Item
  37. 37. CommandBaseUI должен уметь управлять ViewModel CommandBase View ViewModel ICommand
  38. 38. Data HandlersData Handlers – функции обработки данных:• Преобразуют сырые данные в модели.• Пребразуют изменения моделей в команды серверу.
  39. 39. Data Handlers: сетьРабота с данными из сети:• Обработка полученных данных, парсинг JSON, формирование моделей.• Подготовка данных для передачи, формирование команд серверу.
  40. 40. Data Handlers: хранилищеРабота с локальным хранилищем:• Обработка данных загруженных с диска, десериализация, формирование моделей.• Подготовка данных с сохранению на диск, сериализация в поток или массив байт.
  41. 41. Low Level функцииLow Level функции – платформозависимыефункции, которые работают с самыминизкоуровневыми структурами данных – смассивами байтов или потоками.
  42. 42. Как определить Low Level функции?К низкоуровневым функциям нужно отнеститу минимальную функциональность, которуюнельзя сделать кроссплатформенной.Другими словами: все то, что нельзя сделатьобщим в DataHandler.
  43. 43. Low Level функции: примерыНепосредственная передача данных по сети:• Отправка запроса• Получение данныхНепосредственная работа с хранилищем:• Чтение из файла• Запись в файл
  44. 44. ПЛАТФОРМОЗАВИСИМЫЕКОМПОНЕНТЫ
  45. 45. Платформозависимые компоненты• Работа с http.• Работа с локальным хранилищем.• Работа с хранилищем настроек.• Диспетчер.
  46. 46. Http• Библиотека портируемых классов содержит классы HttpRequest и HttpWebRequest.• Всю работу с web-сервисами можно полностью построить на их базе в портируемом проекте.
  47. 47. HttpClient• .net для Win8 имеет класс HttpClient, который поддерживает сжатие трафика и обеспечивает более удобную работу с POST запросами.• Работу с web-сервисами стоит разделить по платформам, чтобы использовать их возможности по максимуму.
  48. 48. Локальное хранилище• WP7: IsolatedStorageFile.GetUserStoreForApplication();• Store Apps: ApplicationData.Current.LocalFolder;• WP8: IsolatedStorageFile.GetUserStoreForApplication(); ApplicationData.Current.LocalFolder;
  49. 49. Локальное хранилище• Создать интерфейс ILocalStorage, в котором определить базовые функции работы с хранилищем: void SaveBytes(string fileName, byte[] bytes); byte[] LoadBytes(string fileName);• Преобразование объектов в байты производить в DataHandler.
  50. 50. Настройки• WP7: IsolatedStorageSettings.ApplicationSettings;• Store Apps: ApplicationData.Current.LocalSettings;• WP8? IsolatedStorageSettings.ApplicationSettings; ApplicationData.Current.LocalSettings;
  51. 51. Настройки WP8• Проекты для WP8 и Windows Store имеют класс ApplicationData.Current.LocalSettings;• Однако на WP8 он не реализован:
  52. 52. ДиспетчерДиспетчер необходимо использовать, когдаизменение данных, произошедшие в фоновыхпотоках нужно отобразить в интерфейсе. В фоновом потоке В UI потоке Data LowLevel Model ViewModel Handler
  53. 53. Неявная диспетчеризация Вызов диспетчераBG Thread UI Thread Data LowLevel Model ViewModel Handler
  54. 54. Явная диспетчеризация Вызов диспетчера BG Thread UI Thread DataLowLevel Model ViewModel Handler
  55. 55. Явная диспетчеризация• Во ViewModelLocator определяем свойство: public Action<Action> DoDispatched { get; }• Это свойство должно быть инициализировано каждой платформой в соответствии со своей спецификой.
  56. 56. Явная диспетчеризация: пример• Инициализация WP7: DoDispatched = action => Dispatcher.BeginInvoke(action);• Инициализация Win8: DoDispatched = action => Dispatcher.RunAsync( priority, action.Invoke);
  57. 57. Явная диспетчеризация: примерИспользование: DoDispatched(() => { … }
  58. 58. Платформозависимые компонентыДля большинства приложений работающих соблаком достаточно следующего:• Фабрика сетевых запросов• Класс для работы с локальным хранилищем.• Класс для работы с настройками.• Доступ к диспетчеру.
  59. 59. Можно ли разрабатыватьодновременно под WP и Win8?
  60. 60. Можно ли разрабатыватьодновременно под WP и Win8? Нужно.
  61. 61. Спасибо!Появились вопросы?
  62. 62. Вадим Балашов разработчик,департамент Мобильных приложений balashov@corp.mail.ru

×