WPF/Silverlight与WinRT比较

17
我从未在WinRT中构建过应用程序(也没有HelloWorld),我很怀疑。
我的问题是,在WPF / Silverlight中是否有WinRT中不存在的功能(不包括出于设计目的而实现不同的功能)?
这些方面对我来说非常重要,是我问题的核心,因此决定是否开始使用WinRT或等待这些功能被为其实现:
- Entity Framework? - WCF RIA? - MVVM支持(Prism)? - 各种工具包(Silverlight / WPF工具包),提供额外的控件,如DatePicker等?
我不清楚WinRT是否完全针对.NET以及它的工作原理。
另外,WinRT是仅限客户端(像WPF)应用程序还是可以在服务器上运行的远程客户端(像Silverlight)?
还有一个问题:如果我开发了WinRT应用程序,它是否能够在Win XP上运行的向后兼容性?
我无法理解为什么MVVM没有像MVC一样内置并具有无缝的IDE支持。但这只是一个旁注。没有MVVM,我无法使用XAML,任何比Hello World更复杂的应用程序都可以通过MVVM更容易地完成。

answer后更新

正如我在答案评论中所述,我确实喜欢WinRT的设计,但除非我了解上述特定技术(EF、WCF-RIA+Validation、MVVM、SDK和工具包),否则问题仍未解决。显然,在我拥有以上技术之前,我不会开始销售WinRT应用程序或深入研究它。
总之,作为大部分工作都是LOB应用程序的人,经过一番调查,HTML5+JS还远远不能替代SL。因此,总结一下,我坚持使用SL并继续向我的客户推荐它。SL开发时间最短,而且没有错误。相比C#,Javascript是一个脏乱且容易出错的语言,没有模式也没有什么东西。
一旦EF+RIA+Prism+工具包完全支持WinRT,我将考虑采用Metro方式处理我的LOB应用程序。

5
好的,我会尽力进行翻译,并保持原意不变。是的。是的。我不知道。什么?那与此无关。什么?是的。不。 - Ritch Melton
2
@RitchMelton +1。这就是他们让我们感受到的。 - Shimmy Weitzhandler
3
值得一提的是,MVVM Light 目前可用于 Metro 风格/WinRT 应用程序。 - Justin Holzer
根据 P&P 最近的路线图公告,我更新了下面的答案,并添加了额外的新信息。 - Rich Turner
2个回答

33

WinRT基本上是一堆封装了一堆Win32 API的COM对象,以CLI兼容程序集的形式公开。

微软修改了他们的C++编译器,使其消耗和生成ECMA 335(即CLI)元数据,而不是更传统和(大部分)仅限于C++ / COM的MIDL或lib文件格式。微软还修改了他们的“Chakra”Javascript引擎,使其也能消耗和发出CLI元数据。

这意味着当针对WinRT时,Javascript和C++代码,以及.NET语言,当然,可以使用CLI兼容(即.NET)程序集,并且可以发出CLI兼容(即.NET)程序集。

因此,可以用C ++、任何.NET语言(即C#、VB.NET、F#、Iron *等)和Javascript编写WinRT代码。

WinRT API对于你来说应该非常熟悉,如果你曾经编写过任何.NET代码的话。设计WinRT时,Windows团队实际上寻求了.NET Framework设计团队的帮助和指导,因此过去11年中指导整个.NET框架团队和大部分.NET社区的相同设计准则已被应用于WinRT API。
WinRT是非常美丽的 :)
WinRT的主要影响是它使用类似的API替换了System.IO的文件、网络、流IO类,但仅支持异步IO。这意味着,除非你采取明确的措施,否则你将无法编写阻塞线程的应用程序,而它们在等待通过网络调用文件系统或外部系统返回。
这是一件好事。
幸运的是,C# v5和VB.NET v.next的新异步/等待特性以及针对C++的特定支持意味着您不必 fundamentally改变您在这个新的异步世界中编写代码的方式 - 通常只需要向调用异步API的方法签名添加“async”关键字,然后在每个异步API调用前使用'await'关键字前缀即可。
我强烈建议您观看Anders Hejlsberg的会议,这应该使整个事情非常清楚。当您在那里时,我也鼓励您观看其他几个//BUILD会议,特别是Harry Pierson关于使用C#和VB.NET使用WinRT的讲座以及Mads'有关在C#和VB中简化异步操作的会议
我还建议您查看我几周前发布的改进的Win8 / WinRT平台架构图表,这应该使事情更加清晰。

关于.NET本身,正如我在上面的帖子中所表达的那样,.NET不会“消失”。虽然一些.NET API将被禁止在WinRT应用程序中(即阻止IO API),但您依赖的大多数API仍然存在并且完全可访问。

关于Silverlight:Silverlight是一个浏览器插件。它是WPF的修改子集,并提供了一些非常强大和有吸引力的功能。事实上,Silverlight XAML引擎已移动到核心Windows团队,并用于Windows 8中大多数Metro UI渲染 - 即使由操作系统自己!

最终结果是,除了更改一些“using”命名空间之外,大多数Silverlight代码都可以顺利运行,几乎没有任何修改

BUILD available to watch here 上有大量的XAML相关会话。

关于向后兼容性,请尽可能:

  • 尽可能将您想在WinRT以及.NET桌面应用程序、Windows Phone等中使用的代码隔离到可移植程序集中。
  • 抽象出需要考虑特定平台依赖项的代码,并考虑手动加载它们或使用IoC将模块组合在一起。

坦白地说,我认为微软的工作并不是为每种情况编写每个框架。有许多来自各种人的各种MVVP方法/框架,都有优点和缺点。如果您找不到一个,那就创建一个并将其放在GitHub上,成为著名人物;)

但最重要的是,没有什么能阻止您下载并尝试Win8 Consumer Preview & Dev11 Beta。去获取它们并尝试它们-我认为您会发现它们非常清新:)

希望对您有所帮助。

更新#1,针对EF、WCF等的特定支持:

你可以在此处详细了解WinRT API surface area, 此处枚举了核心WCF API
但是请注意,微软强烈建议不要使用网络通信来在Metro应用程序和其他Metro应用程序之间或同一台计算机上的桌面应用程序/服务之间进行通信。阅读此SO问题和Kate Gregory的答案-她链接到了一段详细讨论此场景的视频。
如果您想与离线网络服务通信,则有多种选择,包括WCF,套接字等。

关于RIA:微软目前表示,如果您需要数据,您将需要通过服务获取,而不是直接从数据库获取。Metro没有ADO.NET,建议通过OData、JSON、XML/HTTP等方式呈现数据。数据作为服务非常适合RIA场景,因此我预计RIA将得到很好的支持,特别是对于Metro应用程序。这里有一个关于这个主题的BUILD会议,可能会更加详细地说明。

只有您自己可以确定您的具体情况是否受WinRT支持。我认为您最好的选择是下载相关文件并开始探索。

更新2:根据P&P的更新路线图和指导: P&P最近发布了一份新的路线图和指南,用于构建Windows RT / Windows 8 "store" / "modern" LOB应用程序。

这份指南包括 Prism/Kona 的更新,还包括 EntLib6 & Unity3(IoC)。我鼓励对此感兴趣的人学习已发布的材料和参考应用程序 - 那里有很棒的东西 :)

我已经了解了WinRT,并且我非常喜欢API中的更改,特别是与异步相关的更改。只要该功能存在,我就不在乎如何编写它,只要我不必亲自编写它。因此,我可能会开始尝试并感受它,但只要我没有:Entity Framework、WCF RIA客户端-服务器生成(包括验证)和Prism for WinRT,我就不会编写任何真正的应用程序(抱歉,我不想通过开发自己的MVVM框架而变得出名,Prism对我来说最好,我喜欢它:p)。因此,我的问题具体针对我指出的这三种技术。 - Shimmy Weitzhandler
顺便说一句,我不同意你的说法:“我认为微软没有必要为每种情况编写每个框架”,MVVM在XAML中被接受,就像MVC在ASP.NET中一样,因此,微软有责任鼓励它并开发IDE工具以使其使用更加容易。 - Shimmy Weitzhandler
你认为微软应该在这些框架中最接近模仿哪个MVVM框架?http://en.wikipedia.org/wiki/Model_View_ViewModel#Open_source_MVVM_frameworks。微软不应该期望创建与地球上所有东西竞争的产品。例如:微软本可以创建一个jQuery的竞争对手,但幸运的是他们没有这样做。他们发布了大量的指导、工具和支持各种开源MVVM框架。这是正确的做法。 - Rich Turner
@richard 好的,但是难道不应该所有的解决方案都已经结构化为异步加载、服务和 DI 了吗?所以我不太明白它还能提供什么。更好的工具?可能吧……平台?似乎人们只需要改变他们的思维方式并从头开始。这种机会有多大?0。因此,它看起来像是一个可疑的附加值,而且根本没有市场。这是 masochistic 的事情吗? - nicolas
@RichardTurner - 你是指这个链接吗:http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-810T 还是这个链接:http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV324,用于“Async Made Simple”URL?我认为你是指第一个,但我也能理解第二个的适用性。答案中的链接有误。 - user1345223
显示剩余3条评论

3
请注意,WinRT面向的是Windows 8 Metro风格应用程序,而不是使用WPF或Winforms开发的传统桌面应用程序(Windows 7)。Metro风格应用程序仅通过Windows Store发布。Microsoft对Windows Store应用程序收取30%的费用,开发人员获得70%的收益。这与Apple收取的“税”相同。
请忘记在Metro风格版本的Internet Explorer中使用Silverlight。它不支持插件。请记住,Silverlight是一个插件。桌面版的Internet Explorer支持插件,因此支持Silverlight。

你没有理解我的问题。我不介意放弃 SL 转向 WinRT,但我想确保我拥有问题中提到的技术。 - Shimmy Weitzhandler
关于“税收”:在您赚取了20K之后,MS收取的佣金将降至20%。但即使是30%,这通常远远少于为了将盒装产品打折以便进入零售渠道所需的金额,并且可以远远少于通常需要分发您的应用程序电子化、处理付款、处理服务等所需的费用。 - Rich Turner
@Steven,你能否将WinRT应用程序下架吗? - Shimmy Weitzhandler
1
我无法理解微软为什么会犯如此明显的错误,却在其他领域进行了出色的投资。 - nicolas
我不愿意转换到WinRT的原因是,WinRT应用程序只能通过Windows商店分发。而目前几乎没有人使用Windows商店。 - Syaiful Nizam Yahya
@PublicEnermy,虽然它可能还不太普及,但所有使用Windows 8或Windows Mobile 8设备的人都将可以访问它。 - MikeT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接