Разработка windows 8 приложений глазами wpf/silverlight...
Post on 05-Aug-2015
273 Views
Preview:
TRANSCRIPT
Разработка 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
top related