Ну я думаю уже все знают, что совсем недавно на конференции Build было представлено новое обновление для Windows и Windows Phone, поэтому сильно разглагольствовать не буду и сразу переду к фактам, которые влияют а нас сейчас и будут влиять в ближайшем будущем.
Для начала подчеркнем некоторые основные вещи:
- Это обновление будет доступно всем существующим Windows Phone 8 пользователям и будет поставляться предварительно установленной на новых телефонах;
- Она работает с существующими приложениями/играми, запущенные на 8.0 сегодня.
- Там много новых функциональных возможностей конечного пользователя, которое нет смысла описывать здесь…;
- Разработчик может продолжать работать на 8.0 приложениях/играх и публиковать новые версии в магазине в уверенности, что приложение будет продолжать работать на всех 8.0 и 8.1 устройствах.
Прежде чем углубиться в более подробную информацию, я хотел немного рассказать вам о том, где мы находимся сегодня и что принесет нового Windows Phone 8.1 разработчику, который хочет создавать приложения для обоих платформ.
Куда мы пришли?
Всю ситуацию на обеих платформах можно обрисовать рисунком ниже
Это данные с портала “Microsoft by the Numbers” и я думаю некоторых из вас они точно удивили.
Учитывая, что у нас есть 2 платформы: «Windows» и «Windows Phone», то было бы разумно ожидать, что будет в значительной мере равное количество приложений на них. Но, есть 100 000 разрыв между двумя магазинами. Некоторые причины, из-за которых это могло случиться:
- Магазин для Windows Phone существует дольше магазина для Windows 8.
- Разработчики обычно подразумевают телефоны, когда думают о разработке под мобильные платформы, а не о планшетах/ноутбуках и т.п.. Если верить статистике, то только 12% разработчиков думают не только о телефонах, когда начинают разрабатывать свое приложение.
Я думаю что все сводиться к нескольким причинам:
Приложение в разных, хоть и похожих, платформах используются тоже по-разному. Так же приложения находятся в двух разных магазинах. Ну и конечно же, это два разных приложения, а соответственно больше работы и денег будет потрачено на них.
Телефоны “другие”
Лично мой телефон используется совершенно по-другому, чем планшет. Мой телефон в значительной степени всегда со мной, он всегда включен. Я не люблю его заряжать, но тем не менее приходиться это делать чуть ли не каждый день, в зависимости от интенсивности использования.
Планшеты очень разные, они довольно таки редко покидают дом, включаются и выключаются часто.
Опять же, мой ноутбук используется совершенно по-другому. Я основном использую именно его дома/на работе и никогда не держу его в своей руке на улице. Я подключаю его к широкому спектру оборудования (например, мыши, принтеры, сканеры) и т.п..
Интересно взглянуть на пару приложений и посмотреть, как они проводят эту разницу между Windows/Windows Phone…
На примере рассмотрим официальное приложение Twitter:
OneNote:
Мы с вами видим совершенно разные приложения во втором случае (т.е. они действительно мало чем похожи) и практически одинаковые в первом. И есть действительно очень много приложений в wp маркете, которые очень сильно отличаются от своих “собратьев” в windows store. И здесь очень сложно найти какой-либо правильный путь…в действительности все будет зависеть от потребностей пользователя и случаев, в которых он будет пользоваться тем или иным функционалом.
Но есть и еще одно существенное отличие между ними…
Разные платформы
Все кто работали с обеими платформами могут согласиться со мной, что между ними действительно большое отличие.
Windows Phone для разработчика можно отобразить как:
UI слой здесь я назвал «Silverlight XAML», потому что Silverlight рендеритсяг на Windows Phone 8.0. Это интерфейс может быть создан в XAML или он может быть создан в коде.
У приложения есть некоторый код, который так или иначе связывает этот слой пользовательского интерфейса с нижними. Основным API для Windows Phone 8.0 приложения я назвал «Silverlight. NET», который представляет собой подмножество .NET Framework’а, специально разработанного для “телефонных” приложений.
Когда вы смотрите на платформу Windows, 8.1, складывается совершенно другое впечатление:
Во-первых, здесь есть более широкий выбор — разработчик может создавать собственные приложения, используя HTML/CSS как слой пользовательского интерфейса или XAML. Они могут смешивать и сочетать UI слой с кодом, написанным на JavaScript/C++/.NET.
В основе этого кода, в большинстве случаев, WinRT, который в значительной степени обеспечивает всех разработчиков доступом к файловой системе, к камере или сети и т.п. Есть также небольшое количество Win32 API, доступны разработчику, но большинство не обязаны их использовать.
Что общего между ОС Windows 8.1/Phone 8.0, подчеркивает диаграмма ниже:
.NET разработчики могут создавать портативную библиотеку классов, которую можно использовать как на Windows 8.1/Phone 8.0, но разработчик несколько ограничен и код, который можно встроить в эту библиотеку, может содержать только ссылку на подмножества API, которые действительно являются общими для обеих платформ; а это подмножество небольшое .
Это означает, что, например, портативная библиотека классов не может содержать код, который предназначен для доступа к камере или обновления плитки. Такие проблемы делают портативный код полезным только в контексте абстракции.
Разработчики, работающие с шаблоном MVVM относительно хорошо себя чувствуют. Им необходимо сделать различные отображения (UI) для Windows/Phone и обеспечение связанными классами (ViewModels), с помощью которых осуществляется привязки данных.
С помощью инверсии управления и зависимостей реализуются сервисы по отношению к разным платформам. В приведенной выше диаграмме, это услуги представлены в нижней части слева и справа от диаграммы
Пример
Как вы видите есть Windows 8.1 и Windows Phone 8.0 приложение и кроссплатформенная портативнаz библиотека классов, ссылка на которую есть в обоих приложениях. Большая часть кода в этом простом решении находится в кросс-платформенной библиотеки и разбита на модели, вьюмодели и сервисы.
Приложение использует 1 класса модели, 4 портативные вьюмодели. В свою очередь, они полагаться на 3 сервиса:
- Служба для доступа к Flickr (IFlickrService)
- Служба для загрузки фото и сохранения его в библиотеку фотографий на устройстве (IPhotoSavingService)
- Служба для навигации (INavigationService).
Из этих 3 услуги, сервис Flickr можно сделать портативным, т.к. он просто использует портативный класс HttpClient и десериализацию данных JSON (с помощью портативной библиотеки JSON.NET).
Две других услуг будут переносимыми тоже, но нужна конкретная реализация для каждой платформы.
Каждый проект также определяет свой собственный код запуска в виде файла App.xaml и App.xaml.cs и каждый проект предоставляет свои собственные View используя XAML.
Если посмотреть какое-либо отображение (View) — оно состоит полностью их xaml и привязки данных.
А уже в свою очередь на вьюмоделе мы обрабатываем те или иные команды и получаем инстансы определенных сервисов (провайдеров), с отдельной реализацией для каждой платформы.
В итоге
Главной целью этой статьи было показать как сейчас обстоят дела с данными платформами и разработками под них. В следующей части мы уже наконец-то доберемся до новых вещей, которые совсем недавно презентовали на конференции Build.
Ссылка на источник: Windows/Phone 8.1–Building for Both, Part 1
[…] Данный пост является продолжением первой части. […]