24

今天,可以在多个移动平台上使用 C# 编程,例如:

(如有遗漏,请随时编辑)当然,这仍然是 UI 的编程工作,但可以共享应用程序的主要库。

我们都要感谢一个围绕Mono项目聚集的团队和超级英雄Miguel de Icaza,他们的努力是无价的。

困扰我的是,这些选项有什么好处?跨多个移动平台维护一个应用程序的成本是否会减少障碍,然后必须分别对每个库进行编码以获得更好的性能。每种语言的学习曲线?成为万事通与 .NET Ninja

或者知道在本机环境中编程的应用程序的二进制文件大小更小,甚至可能优化得更好,不要忘记您必须等待新平台操作系统更新的支持。

更新:显然还有一件事要考虑,那就是支持。由于 Novell 被 Attachmate Group 收购,Mono 团队全部下岗。然而,由 Miguel De Icaza 领导的团队核心成员创立了新公司 Xamarin,该公司将从头开始重新发明 Mono Mobile 开发工具。

4

8 回答 8

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 体验意味着您的应用程序的死亡。

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

您要重用的最多的是后端模块。决策引擎、搜索例程、数据管理等,甚至这些都会有问题,因为您将被迫在数据结构中做出妥协,以便能够轻松集成在三种不同 UI 范例上工作的三组不同 UI 代码. 例如,您是否使用 DependencyObjects 来绑定到 MVVM 模型中的 Silverlight 视图?如果这样做,它将无法与 Cocoa 的 MVC 模型一起使用,并且您必须分别对这些绑定进行编码。

由于并非所有移动环境都允许您使用完整的功能集——例如,iOS 的 MonoTouch 没有在编译时无法确定的通用结构。您实际上是在使用 .NET 的一个非常小的子集(并且必须不断提醒自己可以在哪里使用哪些功能),这样您就可以在三个不同的平台上运行它们而无需进行重大更改。

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

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

除非所有优点都在于您的应用程序的后端逻辑,而且它是如此之好,以至于人们会忽略 UI 问题,只是为了获得您应用程序的后端功能。根据我的经验,这几乎不会发生。

于 2011-03-23T13:12:29.073 回答
2

对我来说最大的优势是能够在移动平台之间重用业务逻辑和通信代码。是的,我必须一遍又一遍地编写 UI,这需要时间来解决这个问题,但至少我的基础平台是可重用的。

根据我迁移到新平台的经验,学习 UI 框架比学习一门新语言花费的时间要长得多。

于 2011-03-24T10:02:24.283 回答
2

自从 2011 年编写了公认的答案以来,已经出现了几个不同的框架,它们将 MVC 和 MVVM 模式带入了 Mono for Android 和 MonoTouch,这在为这些目标开发应用程序时有很大帮助。

对于 MVC,请查看名为MonoCross的项目

对于 MVVM,请查看Stuart LodgeMvvmCross

后者包含大量代码,用于在三个平台上打开图像、撰写电子邮件、打开网络浏览器、播放声音等等。它还处理 ViewModel 之间的导航。

于 2012-08-20T08:55:02.680 回答
0

Monotouch/Droid 库有一些缺点。有一点速度下降(大约 5%,在大多数情况下可以忽略不计)。

根据我的经验,大小差别不大。大部分大小都在资源中(数据资源、打包图像等 - 不是处理器使用),并且大多数应用程序并没有携带那么多资源(因为加载时间和移动平台上许多默认控件的可用性) .

但是,我认为您不应该在游戏中使用这些框架。我在移动游戏开发方面没有太多经验,但是您在游戏开发中使用的完全不同的框架(XNA、Android 的 NDK..)以及对系统资源(处理器使用、内存等)的需求使它们毫无用处恕我直言。

于 2011-03-17T10:59:23.210 回答
0

一个很大的优势当然是跨平台的代码/类库的可重用性。考虑到这一点,您可以更快地移植/开发应用程序,从而降低成本。

此外,由于代码的可重用性,它将减少维护费用。

于 2011-03-17T06:57:05.607 回答
0

跨平台解决方案仅适用于您的应用程序简单明了的情况。如果您需要复杂的功能,例如具有复杂对象图的本地数据存储,请使用本机或预计花费数月时间来调试问题

于 2014-03-07T01:23:43.643 回答
0

另一种看待这个问题的方法是,您可以使用WebORB集成服务器将现有的 .NET/C# 应用程序移植到各种移动客户端(本机和非本机)相对容易。在客户端,您必须使用本机语言进行编码,或者您可以创建一个 Adob​​e AIR 应用程序,该应用程序在不同的移动操作系统(如 iOS、Android 和 BlackBerry PlayBook)之间具有相当的可移植性。

于 2011-04-18T23:13:27.823 回答
0

优点:

  • 代码全部使用相同的语言,并且(大部分)可在每个平台上使用
  • 缩短开发时间
  • 更便宜

缺点:

  • 包含所需的库会显着增加最小应用程序大小 - 如果您的应用程序会很大,那么差异就不那么显着
  • 性能开销

如果你有钱和人,最好让一些人专注于 iPhone 和 Objective-C,一些 Android 和 Java 等。这样你的程序员将对你的目标平台有深入的了解,并且能够确保您的应用程序充分利用了平台的功能——一个应用程序不应该在所有平台上完全相同(可能是游戏除外),您需要发挥它们的优势和劣势:一个 iPhone 应用程序应该看起来和功能都像 iPhone应用程序等

That said, if you don't have the people or the money, using a single language together with several frameworks is certainly cheaper and faster, and may give you better results than the result of strained attempt to develop for each platform individually.

于 2011-03-20T16:20:00.147 回答