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

| 今天,可以将C#编程用于多个移动平台,例如: 视窗电话7 Android-Monodroid iPhone-Monotouch (如果我错过了一些,请随时进行编辑) 当然,仍然是UI的编程工作,但是可以共享应用程序的主要库。 我们所有人都要感谢围绕Mono项目和超级英雄Miguel de Icaza付出了巨大努力的团队。 让我困扰的是,这些选择的好处是什么? 在多个移动平台上维护一个应用程序的成本是否会减少障碍,然后不得不分别编写每个库以获得更好的性能?每种语言的学习曲线?与.NET Ninja成为千篇一律 或者知道在本机环境中编程的应用程序二进制文件的大小较小,甚至可能进行了更好的优化,并且不要忘记您必须等待对新平台操作系统更新的支持。 更新:显然还有一件事要考虑,那就是支持。由于Novell被Attachmate Group收购,因此所有Mono团队都被解雇了。但是,由Miguel De Icaza领导的团队的核心成员创建了新公司Xamarin,它将重新创建Mono Mobile开发工具。
已邀请:
我认为,使用一个单一环境(即C#/。NET)的最大好处是代码可移植性。像LINQ这样很酷的东西,一旦您习惯了,就无法没有。但是,少数移动操作系统(iOS,Android,WP7)在UI方面有很大不同。 而且,如果我没弄错您的应用程序,那么如果它要在移动设备上运行,它就有相当多的UI交互。大多数移动应用程序就像80%的UI代码。 因此,无论如何,最终您将为每个平台编写一套单独的UI代码-例如,您将使用Silverlight WP7(以及所有WPF优点)进行编写,而您将编写完全不同的UI代码。如果使用Cocoa中的iOS代码集(IB,视图,控制器和内容),您将编写完全不同的Android代码集。 我的经验一直是,在任何平台上编写良好的UI代码都需要大量的经验-例如学习WPF / SL已经是噩梦,那就是扔掉Cocoa Touch和整个Android混乱局面。当然,您可以编写三组外观和感觉相当相似的UI,但是很有可能您将非常努力地重用代码并拥有通用的数据结构,以至于与之相比,您的UI最终会低于标准水平。专用应用程序-在当今这个残酷的移动应用程序世界中,非超级(更不用说低于标准的)UI体验意味着您的应用程序将要死亡。 同样,所有三个移动环境具有不同的连接性范例以及多媒体范例。您最终会写出三个版本,并学习了三种环境,尽管使用的是您所熟悉的一种语言。 您要重用的最多的是后端模块。决策引擎,搜索例程,数据管理等。甚至这些都将成为问题,因为您将不得不在数据结构中折衷以仅易于与在三个不同UI上工作的三组不同UI代码集成在一起范例。例如,您是否使用DependencyObjects绑定到MVVM模型中的Silverlight视图?如果这样做,它将无法与Cocoa的MVC模型一起使用,并且您必须单独编码这些绑定。 而且由于并非所有移动环境都允许您使用全部功能集-例如,MonoTouch for iOS不会提供无法在编译时确定的通用构造。实际上,您只使用了.NET的一个很小的子集(必须不断提醒自己在什么地方可以使用什么功能),以便您可以在三个不同的平台上运行它们而无需进行重大更改。 现在,为WP7平台编写图像时,它具有所有这些限制,该平台支持整个.NET功能集。我不认识你,但我会发疯的。而且,您的WP7应用永远无法与其他应用竞争。 我认为,痛苦和妥协是不值得的。您最终将获得三个一般的应用程序,这两个平台中的人都不喜欢。 除非所有好处都在于您应用程序的后端逻辑,否则它是如此之好,以至于人们会忽略UI问题,只是为了获得应用程序的后端功能。以我的经验,这几乎永远不会发生。
对我来说,最大的好处是能够在移动平台之间重用业务逻辑和通信代码。是的,我必须一遍又一遍地编写UI,花费时间来解决这个问题,但是至少我的基础平台是可重用的。 根据我迁移到新平台的经验,学习UI框架要比学习新语言花更长的时间。
自从2011年编写了接受的答案以来,出现了两个不同的框架,这些框架将MVC和MVVM模式引入到适用于Android和MonoTouch的Mono中,这在为这些目标开发应用程序时有很大帮助。 对于MVC,请查看名为MonoCross的项目 对于MVVM,请查看Stuart Lodge \'s MvvmCross 后者包含用于在这三个平台上打开图像,编写电子邮件,打开网络浏览器,播放声音等等的大量代码。它也处理ViewModel之间的导航。
一个很大的优势当然是跨平台的代码/类库的可重用性。考虑到这一点,您能够更快地移植/开发应用程序,从而降低了成本。 另外,由于代码的可重用性,它将减少维护费用。
Monotouch / Droid库有某些缺点。速度会有所下降(大约5%,在大多数情况下可以忽略不计)。 以我的经验,大小并没有太大差异。资源的大小很大(数据资源,打包的图像等-不占用处理器),并且大多数应用程序携带的资源并不多(因为加载时间和移动平台上许多默认控件的可用性) )。 我不认为您应该在游戏中使用这些框架。我在移动游戏开发方面没有太多经验,但是您在游戏开发中使用的框架完全不同(XNA,Android的NDK ..)以及对系统资源(处理器使用率,内存等)的需求。 ),使它们变得毫无用处。
优点: 全部使用相同的语言编写代码,并且(大多数)可以在每个平台上使用 减少开发时间 便宜一点 缺点: 包含所需的库会极大地增加最小应用程序大小-如果您的应用程序将很大,那么差异不会太大 性能开销 如果您有钱又有钱,那么最好让一些人们专注于iPhone和Objective-C,一些Android和Java等。这样,您的程序员将对目标平台有深入的了解,并且会能够确保您的应用程序充分利用该平台的功能-所有平台上的应用程序都不应该完全相同(也许游戏除外),您需要发挥各自的优势和劣势:iPhone应用程序应外观和功能类似于iPhone应用程序等。 就是说,如果您没有人或没有钱,将单一语言与多个框架一起使用肯定会更便宜,更快捷,并且与为每个平台单独开发而付出的辛苦努力相比,可能会带来更好的结果。
另一种解决方法是,您可以使用WebORB集成服务器将现有的.NET / C#应用程序移植到各种移动客户端(本机和非本机)相对容易。在客户端,您将不得不使用本机语言进行编码,或者您可以创建一个Adobe AIR应用程序,该应用程序可以在不同的移动OS'(例如iOS,Android和BlackBerry PlayBook)之间轻松移植。
跨平台解决方案仅在您的应用程序简单明了的情况下才有效。 如果您需要复杂的功能(例如带有复杂对象图的本地数据存储),请采用本机模式或期望花费数月时间调试问题

要回复问题请先登录注册