任何人都有跨平台 WP7 Android iOS 移动开发(monotouch、monodroid、C#)的架构经验

Posted

技术标签:

【中文标题】任何人都有跨平台 WP7 Android iOS 移动开发(monotouch、monodroid、C#)的架构经验【英文标题】:Anyone have experience with architecture for cross platform WP7 Android iOS mobile development (monotouch, monodroid, C#) 【发布时间】:2012-01-06 09:32:14 【问题描述】:

这个问题具体与推荐的架构和人们以前分别使用 C#、Monotouch 和 Monodroid 开发的跨平台 WP7、iosandroid 应用程序的经验有关。我研究过之前的问题here、here 和here。他们提供了很好的答案,但不是我想要的。我还发现 this excellent question 确实包含成本效益,因此存在一些重叠。

我需要为一家健康和健身公司开发一款跨平台的 iPhone/iPad、WP7 和 android 应用程序,该应用程序将与他们的网站集成。该应用程序需要少量本地数据存储以用于离线模式并在网络可用时与网站同步。我是一个彻头彻尾的 Windows (C#/C++) 开发人员,我真的不想走三个 Objective C、Java 和 C# 应用程序的路线,尽管如果我必须这样做的话。我还将担任技术主管,并将一些工作分配给该项目的团队。

我想知道这里是否有人有使用 Monotouch、Monodroid 和 WP7 进行跨平台开发的经验,并分享他们在应用程序架构方面的经验,以尽可能多地重用代码。我正在考虑的架构如下:

我的问题如下:

这里有人试过这样的吗? 这些框架(Monotouch、monodroid)对这类工作来说是否值得? 我能否在 Visual Studio 2010 中为 Monotouch、Monodroid 和 Wp7 目标设置单独的项目 (dlls/exe) 中的整个项目(但使用“添加为链接”共享代码)? 对于这种(或类似的)架构,我实际上可以期待什么样的代码重用?即,我可以使用哪些策略/模式来重用本地数据访问、Web 服务和业务逻辑?

【问题讨论】:

我喜欢你的云图 如果您是架构师,那么采用一种不受您自己的技术专长(C#/C++)限制的方法不是更有意义吗?正如您引用的问题所表明的那样,html / PhoneGap / javascript 是解决此问题的久经考验的方法。当然,这并非没有陷阱,而且骑行并不容易,但它肯定可以并且已经完成。我对您可能收到的答案很感兴趣。 业务逻辑有多复杂?我敢打赌,你最好在没有单声道包装器的情况下编写本机应用程序。 我发现在 MonoTouch 应用程序、Android 应用程序和 Windows Phone 7 应用程序之间共享代码的最佳示例来自 Jonas - jonas.follesoe.no/2011/07/22/cross- platform-mobile-ndc-2011/ 所以这可能值得一看。 我正在开发一个应用程序,它有一个统一的代码库,支持 windows、android 和 wp7 应用程序,ios/OSX 即将推出。全部由单声道供电,到目前为止一切顺利。对于所有“为了表现而去本土”的人——你错了。我是一名原生 android 开发人员,并且在 ios 和 android 上大放异彩。不能说关于 html 框架。我为这个特定平台选择单声道而不是原生的原因是为了避免代码库碎片化以及需要处理 3 组单独的错误。对我的选择非常满意。 【参考方案1】:

您可能想查看 MonoCross 项目,该项目旨在帮助您重用具有多个表示层的 C# 代码:

http://code.google.com/p/monocross/

MonoCross (ITR Mobility) 的作者为各种客户创建了多个移动跨平台解决方案,并撰写了两本关于该主题的书,一本是《企业中的 iPad》(http://amzn.to/zAhQK6) 和即将出版的《Cross-使用 C# 进行平台移动开发”(http://amzn.to/wM6RsF)。

与此同时,您可以观看 Scott Olson 在 Monospace 2011 上所做的演示,该演示描述了如何使用 MonoCross 以重用业务逻辑同时针对多个移动和桌面平台:

http://www.infoq.com/presentations/The-Rise-of-Mono-in-the-Enterprise

他们在代码中强制执行严格的 MVC 拆分:

(来源:tirania.org)

使用此模型设计应用程序的最大好处是您可以在每个平台上运行具有本机用户界面的相同应用程序。您可以获得原生 iOS、Android、Windows UI,它们甚至还有一个 ASP.NET 前端,允许您发布相同业务逻辑的 Web 版本。

Apple 在其 iPad 业务中展示的 Medtronic 示例应用程序成功地使用了这项技术:

http://www.apple.com/ipad/business/profiles/medtronic/

我建议您也查看 Scott 的博客,他定期在该博客中发布关于他在跨平台架构方面的经验。

【讨论】:

哦,是的。看起来像我的有点框架(在 mnet 上完整)。感谢分享,感谢信息。 事实上,我很想取消标记 HTML5 答案并将其标记为答案;)对不起科林。将对两者都进行一些可行性研究,但我更喜欢完整的 .NET 解决方案的想法。告诉我,abvoe 是否也适用于 Windows Phone? (您提到 Windows UI,我认为这意味着 Windows 桌面)。我们希望发布同一应用程序的 WP7、Android、iPhone、iPad 以及 ASP.NET(网站)版本。 是的,以上内容适用于 Windows Phone 7。我们还一直在为常用服务添加跨平台 API:blog.xamarin.com/2011/11/22/introducing-the-xamarin-mobile-api【参考方案2】:

根据您的 cmets,您的要求是跨移动平台,该平台将与其现有服务集成,但也可以离线工作。您通过 Mono 对 C# 特别感兴趣,但是您表示您不会忽视其他方法。

我觉得 HTML / PhoneGap / JavaScript 是您应该详细探索的路线。这个框架的WP7版本刚刚发布,我有过releasing an application to the marketplace使用这种方法的经验。

PhoneGap 包装您的 HTML / JavaScript 代码,在 WP7 的情况下,它被加载到本地存储中。这使应用程序可以完全脱机工作。这适用于所有版本(iOS、Android 等...)

PhoneGap / HTML5 的最大问题可能与我们在为浏览器开发复杂的基于 Web 的应用程序时遇到的问题相同。 JavaScript 的工具不是很好,浏览器差异是一个持续存在的问题。不过,这是一个久经考验的解决方案。

最后,可以为每个平台创建完全不同的应用程序 UI。通过使用 MVVM 模式,我设法在 WP7 和 iOS 应用程序之间共享我的所有 JavaScript 业务逻辑,同时拥有完全不同的 UI:

将此与 WP7 屏幕进行比较:

注意:我计划很快在 AppStore 中提供 iOS 版本的 Property Finder,我只需要弄清楚如何使用 PhoneGap Build!

【讨论】:

我对这份感谢印象深刻。您能否评论一下使用 PhoneGap/HTML5 在 iphone/ipad/wp7/android 上的性能体验?我听说 ios 在渲染 HTML 内容时速度很慢。 情况恰恰相反,iOS 中使用的 webkit 浏览器速度非常快(对于移动浏览器而言),具有良好的 CSS3 支持和硬件加速。不久前,我创建了一个 HTML5 跳转列表控件。便宜的 iPod Touch 上的性能比我写的 WP7 Silverlight 版本好! codeproject.com/KB/scripting/SilverlightToHTML5.aspx gah,好吧,你说服了我(尽管我讨厌 javascript)。下周假期后我会关注你的教程 :) 关于相机,我还能访问这个吗?这是一个小功能,但我只是记得客户希望用户在使用该应用程序时拍摄自己之前/之后的照片。我想可以合并一个上传按钮来从本地磁盘中选择一个文件。 第二个问题,HTML5/JS 中的MVVM? :o 相机,是的,PhoneGap 有一个 API。 MVVM,当然——我使用 KnockoutJS,一个相当简洁的框架。我曾经讨厌 JavaScript,但我知道如果你使用得当,你可以创造出一些很棒的结果。您只需要了解 JavaScript 存在一些相当大的缺陷(请参阅这篇出色的文章 codeproject.com/KB/scripting/javascript-gotchas.aspx)并学会解决它们。【参考方案3】:

只需添加另一种替代方案 - mvvmcross

这个项目是根据 monocross、mvvmlight 和 opennetcf 的经验开发的。

这是一个相当有主见的 mvvm 框架(其中包含我的意见!),它包括对 Droid 和 Touch 的数据绑定支持,并且确实鼓励平台之间的代码重用。

源代码可从https://github.com/slodge/MvvmCross 获得,它已在至少几个大型项目中使用,并且仍在积极开发中。

slideshare 上有一个介绍性演示:http://www.slideshare.net/cirrious/dev-evening-monotouch-monodroid-mvvm-mvvmcross-and-databinding

功能更全面的示例之一是会议应用程序:

【讨论】:

【参考方案4】:

这个问题很难回答,但我想分享一些想法。

移动端的发展情况与90年代前半期的发展非常相似。手机和计算机一样资源有限,移动操作系统正在起步,因此生态系统相对较小。他们有自己的哲学、工具甚至语言。而这是一件好事,却给跨平台开发带来了头疼的问题。因此,有很多尝试来清除这一点。人们构建框架、包装器等,这是一种抽象和abstractions are leaky。这对于移动设备来说非常重要,不仅是 CPU 周期数的性能,还有电池的性能,这对用户来说更为重要。

如果我是你,我会在原生环境中构建应用程序,特别是如果你有一些性能方面的考虑。最好的支持、工具、教育资源等为重复的业务逻辑买单。总而言之,它不是操作系统或数据库管理系统,代码库不会很大;)

话虽如此。关于 Monotouch 和 Monodroid,我会非常小心,因为 Apple blocks iPhone OS apps created by many third-party compilers 和 The King 并不真正关心开发人员。 Mono被专利侵权或专有软件供应商冲洗到苦苦挣扎的情况是很可能的。这让我很难过,因为 C# 是我最喜欢的语言。

PS。我不相信HTML5 for mobile will take 很快就会结束。

【讨论】:

一个很好的一般答案,但是我只想指出您的说法“Apple 阻止由许多第三方编译器创建的 iPhone OS 应用程序”的问题,这篇文章已经过时了。苹果在过去一年改变了他们对此的立场。您可以在 Apple AppStore 上找到众多 PhoneGap (HTML5) 应用程序、Titanium(专有跨平台)、AppMobi 和 Mobile AIR (Adobe Flash / Flex) 应用程序。时代在变! @lukas 感谢您提供的信息丰富的答案。我还没有做出决定,但科林的回答给了我一些思考。我同意您关于手机成熟度的说法,并且每个操作系统中的本机支持可能比“一个 hacky framework to rule them all”(TM)更有优势。我对拆分为三个代码库的唯一担忧是让它们保持同步更新。有了一个小型开发团队,我们将竭尽全力做到这一点。如果要维护 3x 应用程序,这可能是不可能的。啊!如果只有 Windows 开发的日子还在这里:) @Lukas 不知道是谁标记了你的问题,但我个人觉得它很有帮助。 对一个非常过时且不必要的煽动性答案投反对票。如果您有特定的专利问题,请说明。此外,苹果对 3rd 方开发框架的立场早已在 3.3.1 争议中得到阐明,请参阅:tirania.org/blog/archive/2010/Sep-09.html @tempy 我知道 Apple 让 MonoTouch 应用程序出现在 appstore 中。我担心的是,如果他们看到威胁,他们可能会再次这样做。与整个单声道项目类似,C# 是开放的,但 .Net 不是。我还没有具体的专利问题,Apple、MS、Google 将保护他们的产品免受 f.e.专利巨魔,不确定 Mono。

以上是关于任何人都有跨平台 WP7 Android iOS 移动开发(monotouch、monodroid、C#)的架构经验的主要内容,如果未能解决你的问题,请参考以下文章

跨平台开发基于服务器的游戏,包括 iphone、android、WP7 [关闭]

移动应用程序 - 针对 iPhone、WP7、Android 和 Blackberry

MonoTouch、Mono for Android 和 WP7 的认证 WCF 服务

android、wm、wp7、symbian60都用过的来说说,那个系统可玩性更高,如刷机、还有在wm上可以装android、等

在交互细节上,Android 与 iOS 都有哪些区别?

Xamarin Monodroid:WP7 => Android 和自定义控件?