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

时间:2012-01-06 09:32:14

标签: c# windows-phone-7 mobile xamarin.ios xamarin.android

  

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

我需要开发一个跨平台的iPhone / iPad,WP7和Android应用程序,以实现健康和安全。健身公司,将与他们的网站整合。当网络可用时,该应用程序需要少量本地数据存储用于离线模式和与网站同步。我是一个Windows(C#/ C ++)开发人员,并且不想真正想要沿着三个Objective C,Java和C#应用程序走下去,尽管我会这样做。我还将担任技术主管,并为该项目的团队开展一些工作。

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

Proposed architecture for Wp7, Monotouch, Monodroid app

  

我的问题如下:

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

致以最诚挚的问候,

4 个答案:

答案 0 :(得分:25)

您可能希望了解MonoCross项目,该项目旨在帮助您重用多个表示层的C#代码:

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

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

与此同时,您可以观看Scott Olson在2011年Monospace上所做的演示,其中介绍了如何使用MonoCross同时重复使用业务逻辑来定位多个移动和桌面平台:

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

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

MonoCross MVC Pattern http://tirania.org/s/0e187c1c.png

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

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

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

我建议您查看Scott的博客,他定期发布有关跨平台架构经验的文章。

答案 1 :(得分:9)

根据您的意见,您的要求适用于将与其现有服务集成的跨移动平台,但也可以脱机工作。你对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:

enter image description here

将此与WP7屏幕进行比较:

enter image description here

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

答案 2 :(得分:9)

只需添加另一种混合选项 - mvvmcross

这个项目是基于monocross,mvvmlight和opennetcf的经验开发的。

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

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

有关幻灯片共享的介绍性演示文稿:http://www.slideshare.net/cirrious/dev-evening-monotouch-monodroid-mvvm-mvvmcross-and-databinding

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

sql bits app

答案 3 :(得分:1)

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

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

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

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

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