• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Balashov
 

Balashov

on

  • 251 views

 

Statistics

Views

Total Views
251
Views on SlideShare
187
Embed Views
64

Actions

Likes
0
Downloads
1
Comments
0

2 Embeds 64

http://techforum.mail.ru 62
http://www.techforum.mail.ru 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Balashov Balashov Presentation Transcript

    • Мобильные ОС?
    • Разрабатывать ли подМобильные Windows?
    • Рост доли 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)
    • Успехи WP • В ряде стран доля рынка WP перешагнула 10% • Доля рынка WP превысила долю BlackBerry в 26 странах • Доля рынка WP превысила долю iOS в 7 странахhttp://www.idc.com/ (оценивается кол-во проданных устройств)
    • Прогноз роста доли 11.4%WP к 2016 2.6%http://www.idc.com/
    • Рынок 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/ (оценивается кол-во обращений к поисковым машинам)
    • Динамика роста доли 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/ (оценивается кол-во обращений к поисковым машинам)
    • Разрабатывать ли подМобильные Windows?
    • Разрабатывать ли подМобильные Windows? Да.
    • К р о с с п л ат ф о р м е н н а я р аз р а б от к а д л я м о б и л ь н ы х п л ат ф о р м W i n d o w s Вадим Балашов (balashov@corp.mail.ru)
    • Терминология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) DataLowLevel Handler
    • Получение письма ViewModel View Model (Business Logic) DataLowLevel HandlerПолучение массива байт по сети (JSON)
    • Получение письма ViewModel View Model (Business Logic) DataLowLevel HandlerПарсинг JSON, инициализация объекта
    • Получение письма Объект-письмо в памяти ViewModel View Model (Business Logic) DataLowLevel Handler
    • Получение письмаДоп. обработка (обертка HTML) и уведомление UI ViewModel View Model (Business Logic) Data LowLevel Handler
    • Получение письмаОтображение пользователю: компоновка, стили, анимации ViewModel View Model (Business Logic) Data LowLevel Handler
    • Пометка флагом Пользователь нажимает на флаг ViewModel View Model (Business Logic) DataLowLevel Handler
    • Пометка флагом Срабатывает команда ViewModel View Model (Business Logic) DataLowLevel Handler
    • Пометка флагом Меняется состояние объекта ViewModel View Model (Business Logic) DataLowLevel Handler
    • Пометка флагом ViewModel View Model (Business Logic) Data LowLevel HandlerФормируется запрос на установку флага
    • Пометка флагом ViewModel View Model (Business Logic) DataLowLevel Handler Запрос передается на сервер
    • Разделение компонентов MVVMЗависимые компоненты: Независимые компоненты:• Views • Models• Low Level Functions • ViewModels • Business Logic • Data Handlers
    • Кроссплатформеная MVVM View ViewModel Model Data LowLevel Handler Зависимые проекты Портируемые пр-ты
    • Структура решения View Зависимые проекты ViewModelsWP7.x Портируемые пр-ты LowLevel Связывание Ссылки ViewWP8 Models LowLevelStore ViewApps Data Handler LowLevel
    • КРОССПЛАТФОРМЕННЫЙ MVVM
    • ViewModelBaseViewModel должна уметь уведомлять UI ViewModelBase View ViewModel INotifyPropertyChanged
    • СпискиДля списков используйте ObservableCollection Add Item Item Insert Item View Item Item Remove Item
    • CommandBaseUI должен уметь управлять ViewModel CommandBase View ViewModel ICommand
    • Data HandlersData Handlers – функции обработки данных:• Преобразуют сырые данные в модели.• Пребразуют изменения моделей в команды серверу.
    • Data Handlers: сетьРабота с данными из сети:• Обработка полученных данных, парсинг JSON, формирование моделей.• Подготовка данных для передачи, формирование команд серверу.
    • Data Handlers: хранилищеРабота с локальным хранилищем:• Обработка данных загруженных с диска, десериализация, формирование моделей.• Подготовка данных с сохранению на диск, сериализация в поток или массив байт.
    • Low Level функцииLow Level функции – платформозависимыефункции, которые работают с самыминизкоуровневыми структурами данных – смассивами байтов или потоками.
    • Как определить Low Level функции?К низкоуровневым функциям нужно отнеститу минимальную функциональность, которуюнельзя сделать кроссплатформенной.Другими словами: все то, что нельзя сделатьобщим в DataHandler.
    • Low Level функции: примерыНепосредственная передача данных по сети:• Отправка запроса• Получение данныхНепосредственная работа с хранилищем:• Чтение из файла• Запись в файл
    • ПЛАТФОРМОЗАВИСИМЫЕКОМПОНЕНТЫ
    • Платформозависимые компоненты• Работа с http.• Работа с локальным хранилищем.• Работа с хранилищем настроек.• Диспетчер.
    • Http• Библиотека портируемых классов содержит классы HttpRequest и HttpWebRequest.• Всю работу с web-сервисами можно полностью построить на их базе в портируемом проекте.
    • HttpClient• .net для Win8 имеет класс HttpClient, который поддерживает сжатие трафика и обеспечивает более удобную работу с POST запросами.• Работу с web-сервисами стоит разделить по платформам, чтобы использовать их возможности по максимуму.
    • Локальное хранилище• WP7: IsolatedStorageFile.GetUserStoreForApplication();• Store Apps: ApplicationData.Current.LocalFolder;• WP8: IsolatedStorageFile.GetUserStoreForApplication(); ApplicationData.Current.LocalFolder;
    • Локальное хранилище• Создать интерфейс ILocalStorage, в котором определить базовые функции работы с хранилищем: void SaveBytes(string fileName, byte[] bytes); byte[] LoadBytes(string fileName);• Преобразование объектов в байты производить в DataHandler.
    • Настройки• WP7: IsolatedStorageSettings.ApplicationSettings;• Store Apps: ApplicationData.Current.LocalSettings;• WP8? IsolatedStorageSettings.ApplicationSettings; ApplicationData.Current.LocalSettings;
    • Настройки WP8• Проекты для WP8 и Windows Store имеют класс ApplicationData.Current.LocalSettings;• Однако на WP8 он не реализован:
    • ДиспетчерДиспетчер необходимо использовать, когдаизменение данных, произошедшие в фоновыхпотоках нужно отобразить в интерфейсе. В фоновом потоке В UI потоке Data LowLevel Model ViewModel Handler
    • Неявная диспетчеризация Вызов диспетчераBG Thread UI Thread Data LowLevel Model ViewModel Handler
    • Явная диспетчеризация Вызов диспетчера BG Thread UI Thread DataLowLevel Model ViewModel Handler
    • Явная диспетчеризация• Во ViewModelLocator определяем свойство: public Action<Action> DoDispatched { get; }• Это свойство должно быть инициализировано каждой платформой в соответствии со своей спецификой.
    • Явная диспетчеризация: пример• Инициализация WP7: DoDispatched = action => Dispatcher.BeginInvoke(action);• Инициализация Win8: DoDispatched = action => Dispatcher.RunAsync( priority, action.Invoke);
    • Явная диспетчеризация: примерИспользование: DoDispatched(() => { … }
    • Платформозависимые компонентыДля большинства приложений работающих соблаком достаточно следующего:• Фабрика сетевых запросов• Класс для работы с локальным хранилищем.• Класс для работы с настройками.• Доступ к диспетчеру.
    • Можно ли разрабатыватьодновременно под WP и Win8?
    • Можно ли разрабатыватьодновременно под WP и Win8? Нужно.
    • Спасибо!Появились вопросы?
    • Вадим Балашов разработчик,департамент Мобильных приложений balashov@corp.mail.ru