Upload
kuchinskaya
View
193
Download
2
Embed Size (px)
Citation preview
Мобильные ОС
?
Разрабатывать ли под Мобильные 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.06
Kantar WorldPanel (Взято с hi-tech.mail.ru)
Успехи WP
• В ряде стран доля рынка WP перешагнула 10%
• Доля рынка WP превысила долю BlackBerry в 26 странах
• Доля рынка WP превысила долю iOS в 7 странах
http://www.idc.com/ (оценивается кол-во проданных устройств)
Прогноз роста доли WP к 2016
http://www.idc.com/
2.6%
11.4%
Рынок 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
0,41
1,09
1,72
2,26 2,67
3,17
0
0,5
1
1,5
2
2,5
3
3,5
Окт Ноя Дек Янв Фев Мар
Доля, %
http://www.netmarketshare.com/ (оценивается кол-во обращений к поисковым машинам)
Разрабатывать ли под Мобильные Windows?
Разрабатывать ли под Мобильные Windows?
Да.
Кроссплатформенная разработка для
мобильных платформ Windows
В а д и м Б а л а ш о в ( b a l a s h o v @ c o r p . m a i l . r u )
Терминология 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
• Model – объект данных
• View – представление данных в UI
• ViewModel – действия с данными
Model ViewModel View
Основы MVVM
Model ViewModel View
Что? Что
делает? Как
выглядит?
Расширенная MVVM
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Получение письма
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Получение массива байт по сети (JSON)
Получение письма
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Парсинг JSON, инициализация объекта
Получение письма
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Объект-письмо в памяти
Получение письма
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Доп. обработка (обертка HTML) и уведомление UI
Получение письма
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Отображение пользователю: компоновка, стили, анимации
Пометка флагом
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Пользователь нажимает на флаг
Пометка флагом
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Срабатывает команда
Пометка флагом
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Меняется состояние объекта
Пометка флагом
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Формируется запрос на установку флага
Пометка флагом
Model ViewModel
(Business Logic)
Data Handler
View
LowLevel
Запрос передается на сервер
Разделение компонентов MVVM
Независимые компоненты:
• Models
• ViewModels
• Business Logic
• Data Handlers
Зависимые компоненты:
• Views
• Low Level Functions
Кроссплатформеная MVVM
Model ViewModel
Data Handler
View
LowLevel
Зависимые проекты
Портируемые пр-ты
Структура решения
WP7.x View
LowLevel
WP8 View
LowLevel
Store Apps
View
LowLevel
Models
ViewModels
Data Handler
Зависимые проекты
Портируемые пр-ты
Связывание
Ссылки
КРОССПЛАТФОРМЕННЫЙ MVVM
ViewModelBase
ViewModel должна уметь уведомлять UI
ViewModel View INotifyPropertyChanged
ViewModelBase
Списки Для списков используйте ObservableCollection
View Item
Item
Item
Item
Item
Item
Insert
Add
Remove
CommandBase
UI должен уметь управлять ViewModel
ViewModel View ICommand
CommandBase
Data Handlers Data 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 он не реализован:
Диспетчер Диспетчер необходимо использовать, когда изменение данных, произошедшие в фоновых потоках нужно отобразить в интерфейсе.
Model ViewModel Data
Handler LowLevel
В UI потоке В фоновом потоке
Неявная диспетчеризация
Model ViewModel Data
Handler
BG Thread UI Thread
Вызов диспетчера
LowLevel
Явная диспетчеризация
Model Data
Handler
BG Thread UI Thread
Вызов диспетчера
LowLevel ViewModel
Явная диспетчеризация
• Во 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?
Нужно.
Спасибо!
Появились вопросы?
Вадим Балашов
р а з р а б о т ч и к ,
д е п а р т а м е н т М о б и л ь н ы х п р и л о ж е н и й
b a l a s h o v @ c o r p . m a i l . r u