Upload
denis-tsvettsih
View
34
Download
4
Embed Size (px)
Citation preview
Разработка Windows 8 приложений глазами
WPF/Silverlight программиста
Денис ЦветцихАстроСофт
www.astrosoft.ru
10-я конференция .NET разработчиков19 апреля 2015dotnetconf.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 StoreSide 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 ProxyUnity.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:VisualStateAwarePagestoreApps: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.Extensionshttps://www.nuget.org/packages/Prism.StoreApps.Extensions.Mvvm
/https://github.com/denis-tsv/Prism.StoreApps.Extensions.Mvvm
WinRT SOAP Clienthttp://habrahabr.ru/post/233799/https://github.com/Ne4to/SoapClient
MugenMvvmToolkithttp://habrahabr.ru/post/236745/https://github.com/MugenMvvmToolkit
What’s new in Windows 10 Developer Previewhttp://dev.windows.com/en-us/whats-new-windows-10-dev-preview
35
На правах рекламы
http://dev2dev.ru/
https://vk.com/dev2dev
37
Как бороться с отчетом
38
Требования
Динамический ItemsSource (ExpandoObject)
Многоуровневая группировкаFrozen Columns Stacked ColumnsСортировка группSummary для группSummary для таблицыЭкспорт в Excel
39
Библиотеки компонентов
SyncfusionComponentOneTelerikDevExpressInfragistics
Всех возможностей нет нигде
40
С1 FlexGrid Unbound mode
+ Покрывает требования- Трудоемко- Неудобно
41
Альтернатива - TreeMap
Несколько страниц вместо однойКаждая страница – свой уровень
детализации