42
Разработка Windows 8 приложений глазами WPF/Silverlight программиста Денис Цветцих АстроСофт www.astrosoft.ru 10-я конференция .NET разработчиков 19 апреля 2015 dotnetconf.ru

Разработка Windows 8 приложений глазами WPF/Silverlight программиста

Embed Size (px)

Citation preview

Page 1: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

Разработка Windows 8 приложений глазами

WPF/Silverlight программиста

Денис ЦветцихАстроСофт

www.astrosoft.ru

10-я конференция .NET разработчиков19 апреля 2015dotnetconf.ru

Page 2: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

2

Почему это важно

Windows Store Apps – это тренд

Выходит Windows 10

Page 3: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

3

Почему Я об этом говорю

Более 10 проектов для Windows Store

Prism.StoreApps.Extensions

SoapClient для Windows Phone 8.1

Page 4: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

4

План на сегодня

45 минут

Вопросы в конце

Что будет в докладе• Терминология• Особенности разработки для Windows

Store• Наши велосипеды

Page 5: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

5

Отправная точка

Мобильный сотрудник

Информационно-аналитическая система

Page 6: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

6

Опрос

Кто работал с:• Windows 8• Windows Phone

Кто что-нибудь писал под эти платформы?

Page 7: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

Наведем порядок в терминологии

Page 8: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

8

Как правильно, Windows RT или WinRT?

Windows RT Редакция Windows 8 для планшетов с процессорами ARMПоддерживает только Windows Store приложения

WinRT (Windows Runtime)Программная оболочка для Windows Store приложений

Page 9: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

9

Metro UI == Modern UI

Metro UI Стиль оформления пользовательского интерфейса от компании Microsoft

Modern UIНовое название Metro UI, так как бренд Metro оказался занят

Page 10: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

10

Что же мы пишем?

Metro Apps

Modern Apps

Windows 8 Apps

Windows Store Apps

Universal Apps

WinRT Apps

Page 11: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

Особенности WinRT

Page 12: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

12

Откуда ноги растут

WinRT• не .NET• основан на COM• только Windows 8

Page 13: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

13

Распространение приложений

Windows StoreSide Loading 1• ключ 100$ для неограниченного

количества устройств

Side Loading 2• Windows 8 Pro или Enterprise• в домене со специальной политикой

Ежемесячное обновление Developer License

Page 14: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

14

Массовое управление устройствами

Windows Intune• Windows • Windows Phone• Android• iOS

Page 15: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

15

Хранение информации

Local

Temp

Roaming (не более 100 Кб)

Page 16: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

16

Фоновые задачи

Не более 2 секунд

Не чаще раз в 15 мин

Page 17: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

17

Рабочее место сотрудника

Windows 8• Режим киоска

Windows Phone 8.1• Apps Corner

Page 18: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

18

Ограничения

Не реализовано System.Reflection.Emit

Нет Dynamic ProxyUnity.Interception

Castle.DynamicProxy

Page 19: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

19

Жизненный цикл приложения

Running

SuspendedNot Running

SuspendingActivated

Resuming

Terminating

Page 20: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

20

Навигация

Реализована аналогично веб-приложениям:

Frame rootFrame = (Frame)Window.Current.Content;rootFrame.Navigate(typeof (MainPage), “param");

Page 21: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

21

Prism.StoreApps (ViewFirst)

На уровне ViewModelNavigationService.Navigate("MainPage", "arg");

На уровне View<storeApps:VisualStateAwarePagestoreApps:ViewModelLocator.AutoWireViewModel="true">

Page 22: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

22

MugenMvvmToolkit (ViewModel First)

На уровне ViewModelusing (var vm = GetViewModel<FirstViewModel>()){ vm.DisplayName = "First"; await vm.ShowAsync();}

На уровне View магия конвенции именования

Page 23: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

23

Prism.StoreApps.Extensions

Не страницами едиными• Flyout• SettingsFlyout

Page 24: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

24

Flyout (ViewModel First)

На уровне ViewModelvar vm =

Manager.Resolve<AddProductFlyoutViewModel>();if (await vm.ShowAsync()){ //Add product to store }

На уровне View<AppBarButton

child:FlyoutView.FlyoutToken="AddProduct" />

Page 25: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

25

SettingsFlyout (ViewModel First)

На уровне ViewModelvar vm =

Manager.Resolve<AppSettingsFlyoutViewModel>();vm.ShowIndependent = true;await vm.ShowAsync();

На уровне Viewмагия конвенции именования

Page 26: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

26

SOAP-сервисы

Windows Store• Есть поддержка SOAP сервисов

Windows Phone 8.1• System.ServiceModel больше не

поддерживается• Промежуточный REST сервис• А что, если без него обойтись?

Page 27: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

27

Аналог «Add Service Reference»

• Реализован базовый класс SoapClientBase

• По WSDL генерируем код при помощи SvcUtil

• Анализируем его с помощью Reflection• Строим модель при помощи CodeDom• Генерируем код SoapClient

Page 28: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

28

Обобщенный вызов SOAP сервиса

public async Task<TResponse> CallAsync<TRequest, TResponse>(string action, TRequest

request){ // генерируем SOAP запрос IHttpContent httpContent =

GetHttpContent(action, request); // отправляем запрос HttpResponseMessage response =

await Client.PostAsync(EndpointAddress, httpContent); // сериализуем результат в строку string responseContent =

await response.Content.ReadAsStringAsync(); // десериализуем результат return GetResponse<TResponse>(responseContent);}

Page 29: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

29

Пример: контракт сервиса

[ServiceContract]public interface ITestService{ [OperationContract] void Operation1();

[OperationContract] string Operation2(int arg);}

Page 30: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

30

Сгенерированный интерфейс

public interface ITestService{ Task<Operation1Response>

Operation1Async(Operation1Request request); Task<Operation2Response>

Operation2Async(Operation2Request request);}

public class Operation1Request { }public class Operation1Response { }

public class Operation2Request { public int arg;}public class Operation2Response { public string Operation2Result;}

Page 31: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

31

Сгенерированная реализация

public partial class ITestServiceClient : SoapServices.SoapClientBase, ITestService

{ public virtual Task<Operation1Response>

Operation1Async(Operation1Request request) { return CallAsync<Operation1Request, Operation1Response>

("http://tempuri.org/ITestService/Operation1", request); }

public virtual Task<Operation2Response> Operation2Async(Operation2Request request)

{ return CallAsync<int, Operation2Response>

("http://tempuri.org/ITestService/Operation2", request.arg); }}

Page 32: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

32

Что готовит Windows 10

Валидация сейчас • Есть IDataErrorInfo, INotifyDataErrorInfo• В Binding нет ValidatesOnDataErrors и

ValidatesOnExceptions• Решение – велосипед (Prism, Mugen, …)

В Windows 10• UI конпоненты получат свойство

ValidationState и коллекцию ValidationErrors

Page 33: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

33

Резюме

Недостатки

Привычного может не быть

– DynamicProxy– Валидация

В новой версии чего-то может не стать

– SoapClient для Windows Phone 8.1

Достоинства

Портированы популярные .NET библиотекиРеализованы библиотеки UI компонентовМожно создавать сложные бизнес-приложения

– Системы отчетности

Page 35: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

35

На правах рекламы

http://dev2dev.ru/

https://vk.com/dev2dev

Page 36: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

36

Спасибо за внимание

Денис ЦветцихАстроСофт

[email protected]

Page 37: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

37

Как бороться с отчетом

Page 38: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

38

Требования

Динамический ItemsSource (ExpandoObject)

Многоуровневая группировкаFrozen Columns Stacked ColumnsСортировка группSummary для группSummary для таблицыЭкспорт в Excel

Page 39: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

39

Библиотеки компонентов

SyncfusionComponentOneTelerikDevExpressInfragistics

Всех возможностей нет нигде

Page 40: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

40

С1 FlexGrid Unbound mode

+ Покрывает требования- Трудоемко- Неудобно

Page 41: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

41

Альтернатива - TreeMap

Несколько страниц вместо однойКаждая страница – свой уровень

детализации

Page 42: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

42

Теперь и правда все

Денис ЦветцихАстроСофт

[email protected]