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 апреля 2015

dotnetconf.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 Store

Side 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 Proxy

Unity.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:VisualStateAwarePage

storeApps: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 34: Разработка Windows 8 приложений глазами WPF/Silverlight программиста

34

Ссылки

Prism.StoreApps.Extensions

https://www.nuget.org/packages/Prism.StoreApps.Extensions.Mvvm/

https://github.com/denis-tsv/Prism.StoreApps.Extensions.Mvvm

WinRT SOAP Client

http://habrahabr.ru/post/233799/

https://github.com/Ne4to/SoapClient

MugenMvvmToolkit

http://habrahabr.ru/post/236745/

https://github.com/MugenMvvmToolkit

What’s new in Windows 10 Developer Preview

http://dev.windows.com/en-us/whats-new-windows-10-dev-preview

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

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

Syncfusion

ComponentOne

Telerik

DevExpress

Infragistics

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

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]