使用一种编程语言(C#)针对多个移动平台进行定位/开发?成本效益?

nem*_*mke 24 .net android xamarin.ios windows-phone-7 xamarin.android

今天,可以将C#编程用于多个移动平台,例如:

(如果我错过了一些,请随时编辑)当然,它仍然是UI的编程工作,但可以共享主要的应用程序库.

我们都感谢一群聚集在Mono项目和超级英雄Miguel de Icaza的团队,他们的努力是无价的.

困扰我的是,这些选择的好处是什么?在多个移动平台上维护一个应用程序的成本是否较低,然后必须单独编写每个库以获得更好的性能.每种语言的学习曲线?作为所有行业的杰克与.NET忍者

或者知道在原生环境中编写的应用程序二进制文件的大小较小,甚至可能更好地进行优化,而不是忘记您必须等待新平台操作系统更新的支持.

更新:显然还有一件事需要考虑,那就是支持.由于Novell被Attachmate Group收购,所有Mono团队都被解雇了.然而,由Miguel De Icaza领导的团队的核心成员创建了新公司 Xamarin,它将从零开始重塑Mono Mobile开发工具.

Ste*_*ung 19

在我看来,使用单一环境(即C#/ .NET)的最大优点是代码可移植性.像LINQ这样很酷的东西,一旦你习惯了它,你就不能没有.然而,少数移动操作系统(iOS,Android,WP7)在UI方面有很大不同.

而且,如果我没有弄错你的应用程序,那么如果要在移动设备上运行,它就会得到相当多的UI交互.大多数移动应用程序都像80%的UI代码.

因此,您最终还是会为每个平台编写一组单独的UI代码 - 例如,您将使用Silverlight WP7编写(以及所有WPF优点),您将编写完全不同的代码集对于Cocoa中的iOS(IB,视图,控制器和其他东西),你将为Android编写一组完全不同的代码.

我的经验一直是在任何平台上编写优秀的UI代码需要很多经验 - 例如,学习WPF/SL已经成为噩梦,投入Cocoa Touch和整个Android混乱.当然,你可以编写三组外观和感觉相当相似的用户界面,但很可能你会非常努力地重用代码并拥有通用的数据结构,与专用应用程序相比,你的用户界面最终会低于标准 - - 在今天的移动应用程序世界中,非超级(更不用说低于标准)的UI体验意味着您的应用程序死亡.

此外,所有三种移动环境都具有不同的连接范例以及多媒体范例.您最终会编写三个版本,并学习三个环境,尽管用您熟悉的一种语言编写.

您要重用的最多是后端模块.决策引擎,搜索例程,数据管理等等.甚至这些也会有问题,因为您将有力在数据结构中做出妥协,只需在三种不同的UI范例上轻松集成三种不同的UI代码集.例如,您是否使用DependencyObjects来绑定MVVM模型中的Silverlight视图?如果你这样做,它将无法使用Cocoa的MVC模型,你必须单独编写这些绑定.

并且由于并非所有移动环境都能够使用全套功能 - 例如,MonoTouch for iOS不具有在编译时无法确定的通用构造.您实际上是在使用.NET的一小部分(并且必须不断提醒自己在哪里可以使用哪些功能),这样您就可以在三个不同的平台上运行它们而无需进行重大更改.

现在,在为WP7平台编写时,图像具有所有这些限制,该平台支持整个.NET功能集.我不了解你,但我会发疯的.而你的WP7应用程序永远不会与其他应用程序竞争.

在我看来,痛苦和妥协是不值得的.你最终会得到三个一般的应用程序,这两个平台上的人都不会喜欢.

除非所有的优点都在于你的应用程序的后端逻辑,并且人们为了获得应用程序的后端功能而忽略UI问题是非常好的.根据我的经验,这几乎从未发生过.

  • @Geoff,你想写一个关于Mono-Touch的答案吗?对于阅读本文的人来说,这将是非常有益的:-)当然,我的答案中的意见只是 - 我个人的意见 - 我坚持我的观点,但是我希望被证明是错的...... (3认同)
  • +1为一个好的答案.然而,虽然在仅使用一种语言的所有3个平台上获得良好的UI可能很困难,但开发人员没有无限的时间花在完善用2-3种不同语言分别编写的程序上.特别是如果内部或"业务"逻辑是程序的一个主要特征,可能不值得一遍又一遍地重写它. (2认同)
  • 我编辑了你的答案,以消除严重的错误信息,MonoTouch肯定支持反思.对于MonoTouch,你有大量的其他错误信息(即.net的小子集,我们支持可移植的库项目,而不仅仅是WP7).与WP7相比,唯一的限制是围绕jitting,这是来自apple的平台限制. (2认同)