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

Preview:

Citation preview

Разработка Windows 8

приложений глазами

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

Денис Цветцих

АстроСофт

www.astrosoft.ru

10-я конференция .NET разработчиков

19 апреля 2015

dotnetconf.ru

2

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

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

Выходит Windows 10

3

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

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

Prism.StoreApps.Extensions

SoapClient для Windows Phone 8.1

4

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

45 минут

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

Что будет в докладе

• Терминология

• Особенности разработки для Windows Store

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

5

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

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

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

6

Опрос

Кто работал с:

• Windows 8

• Windows Phone

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

Наведем порядок в

терминологии

8

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

Windows RT

Редакция Windows 8 для

планшетов с процессорами ARM

Поддерживает только Windows

Store приложения

WinRT (Windows Runtime)

Программная оболочка для

Windows Store приложений

9

Metro UI == Modern UI

Metro UI

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

интерфейса от компании Microsoft

Modern UI

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

оказался занят

10

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

Metro Apps

Modern Apps

Windows 8 Apps

Windows Store Apps

Universal Apps

WinRT Apps

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

12

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

WinRT

• не .NET

• основан на COM

• только Windows 8

13

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

Windows Store

Side Loading 1

• ключ 100$ для неограниченного количества

устройств

Side Loading 2

• Windows 8 Pro или Enterprise

• в домене со специальной политикой

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

14

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

Windows Intune

• Windows

• Windows Phone

• Android

• iOS

15

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

Local

Temp

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

16

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

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

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

17

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

Windows 8

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

Windows Phone 8.1

• Apps Corner

18

Ограничения

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

Нет Dynamic Proxy

Unity.Interception

Castle.DynamicProxy

19

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

Running

SuspendedNot Running

SuspendingActivated

Resuming

Terminating

20

Навигация

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

Frame rootFrame = (Frame)Window.Current.Content;

rootFrame.Navigate(typeof (MainPage), “param");

21

Prism.StoreApps (ViewFirst)

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

На уровне View<storeApps:VisualStateAwarePage

storeApps:ViewModelLocator.AutoWireViewModel="true">

22

MugenMvvmToolkit (ViewModel First)

На уровне ViewModelusing (var vm = GetViewModel<FirstViewModel>())

{

vm.DisplayName = "First";

await vm.ShowAsync();

}

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

23

Prism.StoreApps.Extensions

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

• Flyout

• SettingsFlyout

24

Flyout (ViewModel First)

На уровне ViewModelvar vm = Manager.Resolve<AddProductFlyoutViewModel>();

if (await vm.ShowAsync())

{ //Add product to store

}

На уровне View<AppBarButton

child:FlyoutView.FlyoutToken="AddProduct" />

25

SettingsFlyout (ViewModel First)

На уровне ViewModelvar vm = Manager.Resolve<AppSettingsFlyoutViewModel>();

vm.ShowIndependent = true;

await vm.ShowAsync();

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

26

SOAP-сервисы

Windows Store

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

Windows Phone 8.1

• System.ServiceModel больше не

поддерживается

• Промежуточный REST сервис

• А что, если без него обойтись?

27

Аналог «Add Service Reference»

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

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

• Анализируем его с помощью Reflection

• Строим модель при помощи CodeDom

• Генерируем код SoapClient

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);

}

29

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

[ServiceContract]public interface ITestService{

[OperationContract]void Operation1();

[OperationContract]string Operation2(int arg);

}

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;}

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);}

}

32

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

Валидация сейчас

• Есть IDataErrorInfo, INotifyDataErrorInfo

• В Binding нет ValidatesOnDataErrors и

ValidatesOnExceptions

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

В Windows 10

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

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

33

Резюме

Недостатки

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

– DynamicProxy

– Валидация

В новой версии чего-то

может не стать

– SoapClient для Windows

Phone 8.1

Достоинства

Портированы популярные

.NET библиотеки

Реализованы библиотеки UI

компонентов

Можно создавать сложные

бизнес-приложения

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

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

35

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

http://dev2dev.ru/

https://vk.com/dev2dev

36

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

Денис Цветцих

АстроСофт

den.tsvettsih@yandex.ru

37

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

38

Требования

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

Многоуровневая группировка

Frozen Columns

Stacked Columns

Сортировка групп

Summary для групп

Summary для таблицы

Экспорт в Excel

39

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

Syncfusion

ComponentOne

Telerik

DevExpress

Infragistics

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

40

С1 FlexGrid Unbound mode

+ Покрывает требования

- Трудоемко

- Неудобно

41

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

Несколько страниц вместо одной

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

42

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

Денис Цветцих

АстроСофт

den.tsvettsih@yandex.ru

Recommended