63

Balashov

Embed Size (px)

Citation preview

Page 1: Balashov
Page 2: Balashov

Мобильные ОС

?

Page 3: Balashov

Разрабатывать ли под Мобильные Windows?

Page 4: Balashov

Рост доли 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)

Page 5: Balashov

Успехи WP

• В ряде стран доля рынка WP перешагнула 10%

• Доля рынка WP превысила долю BlackBerry в 26 странах

• Доля рынка WP превысила долю iOS в 7 странах

http://www.idc.com/ (оценивается кол-во проданных устройств)

Page 6: Balashov

Прогноз роста доли WP к 2016

http://www.idc.com/

2.6%

11.4%

Page 7: Balashov

Рынок 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/ (оценивается кол-во обращений к поисковым машинам)

Page 8: Balashov

Динамика роста доли 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/ (оценивается кол-во обращений к поисковым машинам)

Page 9: Balashov

Разрабатывать ли под Мобильные Windows?

Page 10: Balashov

Разрабатывать ли под Мобильные Windows?

Да.

Page 11: Balashov

Кроссплатформенная разработка для

мобильных платформ Windows

В а д и м Б а л а ш о в ( b a l a s h o v @ c o r p . m a i l . r u )

Page 12: Balashov

Терминология Windows Phone (WP):

• Windows Phone 7.5/7.8 (WP7)

• Windows Phone 8 (WP8)

Page 13: Balashov

Терминология • Windows 8 (Win8)

• Store Apps

• Metro Apps

• Modern Apps

• Windows RT

Page 14: Balashov

Мобильные .net платформы

Page 15: Balashov

Общее подмножество API

Portable Class Library

Page 16: Balashov

Преимущества единого проекта + Единая реализация бизнес логики

+ Единый функционал

+ Единый UX (при разном UI)

+ Меньшее суммарное время разработки

Page 17: Balashov

Недостатки единого проекта – Повышенная сложность в начале проекта

– Более сложная архитектура

– Компромиссные решения по функционалу

Page 18: Balashov

MVVM

Page 19: Balashov

Основы MVVM

• Model – объект данных

• View – представление данных в UI

• ViewModel – действия с данными

Model ViewModel View

Page 20: Balashov

Основы MVVM

Model ViewModel View

Что? Что

делает? Как

выглядит?

Page 21: Balashov

Расширенная MVVM

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Page 22: Balashov

Получение письма

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Получение массива байт по сети (JSON)

Page 23: Balashov

Получение письма

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Парсинг JSON, инициализация объекта

Page 24: Balashov

Получение письма

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Объект-письмо в памяти

Page 25: Balashov

Получение письма

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Доп. обработка (обертка HTML) и уведомление UI

Page 26: Balashov

Получение письма

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Отображение пользователю: компоновка, стили, анимации

Page 27: Balashov

Пометка флагом

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Пользователь нажимает на флаг

Page 28: Balashov

Пометка флагом

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Срабатывает команда

Page 29: Balashov

Пометка флагом

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Меняется состояние объекта

Page 30: Balashov

Пометка флагом

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Формируется запрос на установку флага

Page 31: Balashov

Пометка флагом

Model ViewModel

(Business Logic)

Data Handler

View

LowLevel

Запрос передается на сервер

Page 32: Balashov

Разделение компонентов MVVM

Независимые компоненты:

• Models

• ViewModels

• Business Logic

• Data Handlers

Зависимые компоненты:

• Views

• Low Level Functions

Page 33: Balashov

Кроссплатформеная MVVM

Model ViewModel

Data Handler

View

LowLevel

Зависимые проекты

Портируемые пр-ты

Page 34: Balashov

Структура решения

WP7.x View

LowLevel

WP8 View

LowLevel

Store Apps

View

LowLevel

Models

ViewModels

Data Handler

Зависимые проекты

Портируемые пр-ты

Связывание

Ссылки

Page 35: Balashov

КРОССПЛАТФОРМЕННЫЙ MVVM

Page 36: Balashov

ViewModelBase

ViewModel должна уметь уведомлять UI

ViewModel View INotifyPropertyChanged

ViewModelBase

Page 37: Balashov

Списки Для списков используйте ObservableCollection

View Item

Item

Item

Item

Item

Item

Insert

Add

Remove

Page 38: Balashov

CommandBase

UI должен уметь управлять ViewModel

ViewModel View ICommand

CommandBase

Page 39: Balashov

Data Handlers Data Handlers – функции обработки данных:

• Преобразуют сырые данные в модели.

• Пребразуют изменения моделей в команды серверу.

Page 40: Balashov

Data Handlers: сеть Работа с данными из сети:

• Обработка полученных данных, парсинг JSON, формирование моделей.

• Подготовка данных для передачи, формирование команд серверу.

Page 41: Balashov

Data Handlers: хранилище Работа с локальным хранилищем:

• Обработка данных загруженных с диска, десериализация, формирование моделей.

• Подготовка данных с сохранению на диск, сериализация в поток или массив байт.

Page 42: Balashov

Low Level функции Low Level функции – платформозависимые функции, которые работают с самыми низкоуровневыми структурами данных – с массивами байтов или потоками.

Page 43: Balashov

Как определить Low Level функции?

К низкоуровневым функциям нужно отнести ту минимальную функциональность, которую нельзя сделать кроссплатформенной.

Другими словами: все то, что нельзя сделать общим в DataHandler.

Page 44: Balashov

Low Level функции: примеры Непосредственная передача данных по сети:

• Отправка запроса

• Получение данных

Непосредственная работа с хранилищем:

• Чтение из файла

• Запись в файл

Page 45: Balashov

ПЛАТФОРМОЗАВИСИМЫЕ КОМПОНЕНТЫ

Page 46: Balashov

Платформозависимые компоненты

• Работа с http.

• Работа с локальным хранилищем.

• Работа с хранилищем настроек.

• Диспетчер.

Page 47: Balashov

Http • Библиотека портируемых классов содержит

классы HttpRequest и HttpWebRequest.

• Всю работу с web-сервисами можно полностью построить на их базе в портируемом проекте.

Page 48: Balashov

HttpClient • .net для Win8 имеет класс HttpClient,

который поддерживает сжатие трафика и обеспечивает более удобную работу с POST запросами.

• Работу с web-сервисами стоит разделить по платформам, чтобы использовать их возможности по максимуму.

Page 49: Balashov

Локальное хранилище • WP7:

IsolatedStorageFile.GetUserStoreForApplication();

• Store Apps: ApplicationData.Current.LocalFolder;

• WP8: IsolatedStorageFile.GetUserStoreForApplication(); ApplicationData.Current.LocalFolder;

Page 50: Balashov

Локальное хранилище • Создать интерфейс ILocalStorage, в котором

определить базовые функции работы с хранилищем: void SaveBytes(string fileName, byte[] bytes);

byte[] LoadBytes(string fileName);

• Преобразование объектов в байты производить в DataHandler.

Page 51: Balashov

Настройки • WP7:

IsolatedStorageSettings.ApplicationSettings;

• Store Apps: ApplicationData.Current.LocalSettings;

• WP8? IsolatedStorageSettings.ApplicationSettings; ApplicationData.Current.LocalSettings;

Page 52: Balashov

Настройки WP8 • Проекты для WP8 и Windows Store имеют

класс ApplicationData.Current.LocalSettings;

• Однако на WP8 он не реализован:

Page 53: Balashov

Диспетчер Диспетчер необходимо использовать, когда изменение данных, произошедшие в фоновых потоках нужно отобразить в интерфейсе.

Model ViewModel Data

Handler LowLevel

В UI потоке В фоновом потоке

Page 54: Balashov

Неявная диспетчеризация

Model ViewModel Data

Handler

BG Thread UI Thread

Вызов диспетчера

LowLevel

Page 55: Balashov

Явная диспетчеризация

Model Data

Handler

BG Thread UI Thread

Вызов диспетчера

LowLevel ViewModel

Page 56: Balashov

Явная диспетчеризация

• Во ViewModelLocator определяем свойство:

public Action<Action> DoDispatched { get; }

• Это свойство должно быть инициализировано каждой платформой в соответствии со своей спецификой.

Page 57: Balashov

Явная диспетчеризация: пример • Инициализация WP7: DoDispatched = action =>

Dispatcher.BeginInvoke(action);

• Инициализация Win8: DoDispatched = action =>

Dispatcher.RunAsync( priority,

action.Invoke);

Page 58: Balashov

Явная диспетчеризация: пример Использование:

DoDispatched(() =>

{

}

Page 59: Balashov

Платформозависимые компоненты

Для большинства приложений работающих с облаком достаточно следующего:

• Фабрика сетевых запросов

• Класс для работы с локальным хранилищем.

• Класс для работы с настройками.

• Доступ к диспетчеру.

Page 60: Balashov

Можно ли разрабатывать одновременно под WP и Win8?

Page 61: Balashov

Можно ли разрабатывать одновременно под WP и Win8?

Нужно.

Page 62: Balashov

Спасибо!

Появились вопросы?

Page 63: Balashov

Вадим Балашов

р а з р а б о т ч и к ,

д е п а р т а м е н т М о б и л ь н ы х п р и л о ж е н и й

b a l a s h o v @ c o r p . m a i l . r u