在我看来,使用单一环境(即 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 问题,只是为了获得您应用程序的后端功能。根据我的经验,这几乎不会发生。