WPF / Silverlight против WinRT

На самом деле я никогда не создавал приложение (или HelloWorld) в WinRT, и я очень подозрительно.

У меня вопрос: есть ли в WPF / Silverlight функции, которых нет в WinRT (за исключением функций, которые реализованы по-разному по дизайну)?

И эти аспекты наиболее важны для меня и являются сутью моего вопроса, и, как следствие, решения о том, начинать ли использовать WinRT или ждать, пока они будут реализованы для него:

  • Entity Framework?
  • WCF RIA?
  • Поддержка MVVM (Prism) ???
  • Различные наборы инструментов (Silverlight / WPF), которые предоставляют дополнительные элементы управления, такие как DatePicker и т. Д.?

Мне неясно, полностью ли WinRT нацелен на .NET и как он работает.

Кроме того, является ли WinRT клиентским (например, WPF) приложением или его можно запускать на удаленном клиенте, сидя на сервере (например, Silverlight)?

Еще один вопрос: как насчет обратной совместимости, если я разработаю приложение WinRT, сможет ли оно когда-нибудь работать с Win XP?

В любом случае я не могу понять, почему MVVM не интегрирован в строку и имеет бесшовную поддержку IDE, как MVC. но это всего лишь примечание. Я не могу использовать XAML без MVVM, любое приложение, которое немного больше, чем hello world, легче сделать с MVVM.

Обновить после ответа

Как я прокомментировал ответ, мне нравится дизайн WinRT, но вопрос остается нерешенным, пока я не узнаю о конкретных технологиях, упомянутых выше (EF, WCF-RIA + Validation, MVVM, SDK и Toolkits). И, очевидно, я не собираюсь начинать продавать приложения WinRT или копаться в них, пока у меня не появятся хотя бы вышеперечисленные технологии.

Заключение. Как человек, который большую часть своей работы занимается бизнес-приложениями, после некоторой проверки HTML5 + JS далек от альтернативы SL. Итак, в заключение, я придерживаюсь SL и продолжаю рекомендовать его своим клиентам. SL требует меньше всего времени на разработку и не содержит ошибок. По сравнению с C #, Javascript - это грязный язык, подверженный ошибкам, без шаблонов и без лишних слов.

Как только EF + RIA + Prism + Toolkits будут полностью поддерживаться для WinRT, я подумаю о том, чтобы использовать свои бизнес-приложения в метро.


person Shimmy Weitzhandler    schedule 29.03.2012    source источник
comment
да. да. Я не знаю. Какие? Это не имеет к этому никакого отношения. Какие? да. Нет.   -  person Ritch Melton    schedule 30.03.2012
comment
@RitchMelton +1. Вот как они позволяют нам чувствовать.   -  person Shimmy Weitzhandler    schedule 30.03.2012
comment
FWIW, MVVM Light в настоящее время доступен для приложений городского типа / WinRT.   -  person Justin Holzer    schedule 15.07.2012
comment
Обновил свой ответ ниже, добавив дополнительную новую информацию после недавних объявлений о планах P&P.   -  person Rich Turner    schedule 19.04.2013


Ответы (2)


WinRT - это, по сути, набор COM-объектов, содержащих набор Win32 API, представленных как сборки, совместимые с CLI.

Microsoft изменила свой компилятор C ++ для использования и генерации ECMA 335 ( т.е. CLI), а не более традиционные и (в основном) форматы файлов MIDL или lib только для C ++ / COM. Microsoft также модифицировала свой механизм Javascript "Chakra", чтобы также использовать и передавать метаданные CLI.

Это означает, что при ориентации на WinRT, код Javascript и C ++, наряду с языками .NET, конечно, может использовать сборки, совместимые с CLI (например, .NET), и может создавать сборки, совместимые с CLI (например, .NET).

Таким образом, можно писать код WinRT на C ++, любом языке .NET (например, C #, VB.NET, F #, Iron * и т. Д.) И на Javascript.

API WinRT будут вам ОЧЕНЬ знакомы, если вы когда-либо писали какой-либо код .NET. Команда разработчиков Windows фактически обратилась за помощью и руководством группы разработчиков .NET Framework при разработке WinRT, поэтому те же рекомендации по проектированию, которыми руководствовалась вся команда .NET Framework и большая часть сообщества .NET в течение последних 11 лет, были применены к API WinRT.

WinRT, прямо скажем, красив :)

Основное влияние WinRT заключается в том, что он заменяет классы ввода-вывода файла, сети и потока в System.IO аналогичными API, но ТОЛЬКО поддерживает асинхронный ввод-вывод. Это означает, что вы не сможете писать приложения, которые блокируют потоки, пока они ждут возврата вызовов к файловой системе или внешним системам через сеть, если вы не предпримете явных шагов для этого.

Это ХОРОШО.

К счастью, новые функции async / await в C # v5 и VB.NET v.next, а также особая поддержка C ++ означают, что вам не нужно принципиально менять способ написания кода в этом новом асинхронном мире - обычно вы просто необходимо добавить ключевое слово async к сигнатурам методов, которые вызывают асинхронные API, а затем использовать ключевое слово await перед каждым вызовом асинхронного API.

Я НАСТОЯТЕЛЬНО рекомендую вам посмотреть сеанс Андерса Хейлсберга, который должен составить все вещь очень ясная. Пока вы там, я также рекомендую вам посмотреть несколько других сессий // BUILD, особенно Выступление Гарри Пирсона об использовании WinRT с C # и VB.NET и сеанс Мэдса на Простая асинхронность в C # и VB.

Я также рекомендую вам взглянуть на диаграмма улучшенной архитектуры платформы Win8 / WinRT, которую я опубликовал в блоге несколько недель назад, которая должна прояснить ситуацию.

Что касается самого .NET, как я сформулировал в своем сообщении выше, .NET никуда не денется. Хотя некоторые из API .NET будут запрещены в приложениях WinRT (т. Е. Блокируют API ввода-вывода), большинство API, от которых вы зависите, остаются и полностью доступны.

Что касается Silverlight: Silverlight - это надстройка браузера. Это модифицированное подмножество WPF, предлагающее очень мощные и привлекательные функции. Настолько, что движок Silverlight XAML был перемещен в основную группу разработчиков Windows и используется для большей части рендеринга пользовательского интерфейса Metro в Windows8 - даже самой ОС!

В конечном итоге большая часть вашего кода Silverlight будет работать нормально без каких-либо модификаций, кроме простого изменения нескольких «использующих» пространств имен.

Существует множество сеансов, ориентированных на XAML, из BUILD , доступных для просмотра здесь.

Что касается обратной совместимости, стремятся:

  • По возможности изолируйте код, который вы хотите использовать в WinRT, а также в классических приложениях .NET, Windows Phone и т. Д., В переносимые сборки.
  • Абстрактный код, который должен учитывать определенные зависимости платформы и рассматривать возможность их ручной загрузки или использования IoC для объединения ваших модулей.

Честно говоря, я не думаю, что задача Microsoft - писать каждую структуру для каждого сценария. Существует несколько подходов / фреймворков MVVP от разных людей с различными за и против. А если вы его не найдете, создайте его, разместите на GITHub и станьте знаменитым;)

Но, прежде всего, вам мало что мешает загрузить и попробовать Win8 Consumer Preview и Dev11 Beta. Пойдите, возьмите их и попробуйте - я думаю, вы найдете их очень освежающими :)

HTH.

Обновление №1 в ответ на конкретную поддержку EF, WCF и т. Д .:

Вы можете найти область интерфейса WinRT API, подробно перечисленную здесь < / а>. Перечислены основные API-интерфейсы WCF. здесь.

Однако обратите внимание, что Microsoft настоятельно не рекомендует использовать сетевые коммутаторы для связи между приложениями Metro и другими приложениями для городских сетей или настольными приложениями / службами на одном компьютере. Прочтите этот ТАК вопрос и ответ Кейт Грегори - она ​​ссылается на видео, где этот сценарий подробно обсуждается.

Если вы хотите взаимодействовать с нестандартными сетевыми службами, у вас есть широкий выбор вариантов, включая WCF, сокеты и т. Д.

Что касается RIA: в настоящее время Microsoft заявляет, что если вам нужны данные, вам нужно будет получать их через службу, а не напрямую из БД. ADO.NET для Metro отсутствует, и рекомендуется выводить данные через OData, JSON, XML / HTTP и т. Д. Данные как услуга - это во многом сценарий RIA, поэтому я ожидаю, что RIA будет хорошо поддерживаться для приложений Metro. Вот сессия BUILD на эту тему, которая может пролить больше света.

Только вы можете сказать, поддерживаются ли ваши конкретные сценарии в WinRT. Я думаю, что лучше всего будет загрузить биты и начать изучение.

Обновление 2 в соответствии с обновленной дорожной картой и руководством P&P: P&P недавно опубликовала новую дорожную карту и руководство для создание "магазинных" / "современных" бизнес-приложений для Windows RT / Windows 8.

Это руководство включает в себя обновления Prism / Kona, а также EntLib6 и Unity3 (IoC). Я призываю всех, кто интересуется этим пространством, изучить опубликованные материалы и справочные приложения - там есть много интересного :)

person Rich Turner    schedule 29.03.2012
comment
Я читал о WinRT, и мне очень нравятся изменения в API, особенно те, которые связаны с async. В любом случае, пока существует функция, мне все равно, как ее писать, если мне не нужно писать ее самому. Так что я мог бы начать экспериментировать с этим и почувствовать это, но не буду писать никаких реальных приложений, пока у меня нет: Entity Framework, создание клиент-серверной части WCF RIA, включая проверку, Prism для WinRT (извините, я не Чтобы стать знаменитым, разработав собственный фреймворк MVVM, Prism мне больше всего подходит, мне это нравится: p). Так что мой вопрос конкретно по трем технологиям, которые я указал. - person Shimmy Weitzhandler; 30.03.2012
comment
И, кстати, я не согласен с вашим утверждением Я не думаю, что задача Microsoft - писать каждую структуру для каждого сценария, MVVM принимается в XAML так же, как MVC находится в ASP.NET, и, следовательно, это MSFT работа, чтобы поощрять его и разрабатывать инструменты IDE, чтобы упростить его использование. - person Shimmy Weitzhandler; 30.03.2012
comment
Я бы действительно спросил об отношении Win32 / WinRT. Я действительно верю, что WinRT работает поверх самого ядра, полностью минуя Win32. Может быть, для более быстрой разработки / тестирования они построили его поверх Win32. Но в будущем это может измениться. Просто потому, что использовать Win32 из приложений Metro запрещено. - person Euphoric; 30.03.2012
comment
Какую платформу MVVM, по вашему мнению, Microsoft должна наиболее точно копировать из этой серии? en.wikipedia.org/wiki/. Не следует ожидать, что Microsoft создаст конкурента всему на планете. Показательный пример: Microsoft МОЖЕТ создать конкурента jQuery. К счастью, они этого не сделали. Они опубликовали множество руководств и инструментов, а также поддерживают множество платформ MVVM с открытым исходным кодом. Это правильный поступок. - person Rich Turner; 30.03.2012
comment
@RichardTurner, хорошо. хотя мне это не нравится, я согласен с частью MVVM. Итак, в заключение меня не волнует WinRT, пока Prism еще не нацелилась на него, а также на другие проблемы, о которых я упоминал. (EF, RIA, SDK и ToolKit). - person Shimmy Weitzhandler; 30.03.2012
comment
Другой способ подумать о WinRT: можете ли вы позволить себе игнорировать его только потому, что в настоящее время нет зрелой функции, от которой вы зависите? Не могли бы вы обойти своих конкурентов, создав красивые Metro-приложения, использующие вашу существующую инфраструктуру и ресурсы? Не могли бы вы начать с простого и усложнять работу по мере роста вашего опыта и появления дополнительных инструментов, библиотек и т. Д.? Ответить, конечно, можете только вы;) Удачи! - person Rich Turner; 30.03.2012
comment
@richard в порядке, но не все решения должны быть структурированы с асинхронной загрузкой, обслуживанием и DI уже .... Так что я не совсем понимаю, что еще это дает. Лучшая оснастка? Может быть .... платформа? Кажется, людям нужно просто поменять свое имя и начать все с нуля. Шанс на это? 0. Это похоже на сомнительную добавленную стоимость ПЛЮС, что для начала просто нет рынка. Это мазохизм? - person nicolas; 13.08.2012
comment
@RichardTurner - вы имели в виду эту ссылку: channel9.msdn.com/Events/BUILD / BUILD2011 / TOOL-810T или по этой ссылке: channel9.msdn. com / Events / TechEd / NorthAmerica / 2011 / DEV324 для асинхронного простого URL? Я полагаю, вы имели в виду первое, но я мог видеть, где применимо второе. Ссылка в ответе испорчена. - person ; 07.09.2012

Обратите внимание, что WinRT нацелен на приложения в стиле Metro для Windows 8, а НЕ на обычные настольные приложения (Windows 7), разработанные с помощью WPF или Winforms. Приложения в стиле Metro будут распространяться ТОЛЬКО через Магазин Windows. Microsoft взимает 30% за приложения из Магазина Windows. Разработчики получают 70%. Это тот же «налог», который взимает Apple. Забудьте о Silverlight для версии Internet Explorer в стиле Metro. Он НЕ поддерживает плагины. Помните, что Silverlight - ЭТО плагин. Версия Internet Explorer для настольных ПК поддерживает плагины, отсюда и Silverlight.

person Steven Licht    schedule 30.03.2012
comment
Вы не поняли мой вопрос. Я не против перейти на WinRT, отказавшись от SL, я просто хочу убедиться, что у меня есть технологии, упомянутые в моем вопросе. - person Shimmy Weitzhandler; 30.03.2012
comment
Что касается налога: комиссия MS снижается до 20% после того, как вы заработали 20 тысяч долларов. Но даже при 30% это, как правило, намного меньше, чем можно было бы в конечном итоге обесценить продукт в штучной упаковке, чтобы получить его в розничном канале, и может составлять намного меньше, чем часто требуется для распространения ваших приложений в электронном виде, обработки платежей и обслуживания. , и т.д. - person Rich Turner; 30.03.2012
comment
@Steven Сможете ли вы развернуть приложения WinRT вне рынка? - person Shimmy Weitzhandler; 22.04.2012
comment
Я не могу понять, как MSFT может делать такие очевидные ошибки и делать блестящие инвестиции в некоторых других областях. - person nicolas; 13.08.2012
comment
Причина, по которой я не могу переключиться на WinRT, заключается в том, что приложения WinRT будут распространяться только через магазин Windows. которых ни у кого нет. - person Syaiful Nizam Yahya; 18.04.2013
comment
@ PublicEnermy, возможно, это еще не распространено, но все, у кого есть Windows 8 или устройство Windows Mobile 8, будут иметь к нему доступ - person MikeT; 30.09.2013