MonoTouch和MonoForAndroid之间的代码共享

时间:2012-05-18 16:08:46

标签: xamarin.ios monodevelop xamarin.android

在MonoTouch和Mono For Android项目之间共享业务逻辑c#代码的最佳做法是什么?

编辑: 最初,我的问题是关于物理文件共享:

  1. 您打算使用什么:网络文件共享或某些代码 版本控制(git,svn)?在我的情况下,我使用两个工作站 - Mac(MonoDevelop with MonoTouch)和PC(Visual Studio with MonoDroid的)。
  2. 解决方案/项目文件夹结构怎么样?在 “博客文章:Xamarin Mobile World Congress 2012 Unofficial Conference App Released!”示例结构非常令人困惑: 一个文件夹中的几个解决方案,然后是一个不同的平台项目 子文件夹具有不同的文件夹和项目名称。它不能天真地完成 用IDE。他们是否手动编辑解决方案文件和文件夹名称的内容 在IDE环境之外?
  3. 并且对于通用代码的项目有什么样的配置文件(模板) 使用? Monotouch有几个:空项目,MonoTouch库 项目和MonoTouch绑定项目?在Android我supose - Android类库?

2 个答案:

答案 0 :(得分:12)

这是一个非常笼统的问题,但这里有一些资源可以帮助您入门:

  1. 视频:Cross-platform Mobile Development
  2. 博文:Shared Libraries For Windows Phone 7, MonoDroid and Beyond
  3. 预订:Mobile Development with C#
  4. 博文:Xamarin Mobile World Congress 2012 Unofficial Conference App Released!
  5. 编辑(回答您的新问题)

    1. 跨项目链接文件背后的想法是,文件只有一个实际副本,而不是必须管理多个副本并让它们自己保持同步。该文件实际上只存在于一个项目中并链接到其他项目中,但是在编译项目时,它会将文件视为实际存在。

    2. 我无法确切地说出他们是如何创建文件夹结构的,但我知道有很多情况我会手动编辑项目或解决方案文件以获得我想要的文件夹结构,因为没有办法通过IDE单独获得我想要的东西。这实际上归结为个人对您希望如何构建文件夹的偏好。

    3. 最后,您需要的是针对您要定位的每个平台的类库项目。使用链接文件方法时,完全取决于您放置物理文件的位置。我经常使用的一种方法是实际创建一个标准的.NET 4.0类库,将文件放在那里,然后将它们链接到我的Mono for Android和MonoTouch类库中。如果你关心的只是针对iOS和Android,那可能比它的价值更麻烦,你可以让这些文件存在于一个项目中并将它们链接到另一个项目中。

答案 1 :(得分:8)

免责声明:我有一个particular Mvvm methodology用于跨多平台项目共享代码......

尽管如此,我真的不相信“一刀切”的框架 - 我认为你需要小心选择最适合你的项目,开发人员和组织的方法。

话虽如此,您可以在Mono开发方法中使用的一些工具是:

  • 使用Portable Class Libraries在平台之间共享完全相同的代码
  • 使用特定于平台的类库在平台之间共享代码,使用Microsoft的Project Linker tool链接这些代码
  • 在您的类库中使用#define代码来提供项目的特定于平台的实现(我个人试图避免这种方法,但它确实提供了最快的上市途径)
  • 使用DI / IoC技术为需要特定平台实现的场合提供组件。
  • 使用组件链接提供IoC - 例如这就是Xamarin MobileAPI所做的
  • 使用基于服务器的逻辑来实现真正的共享功能 - 例如使用REST或SOAP-XML服务实现逻辑
  • 在平台之间共享测试(例如NUnit)以确保逻辑的质量
  • 使用共享代码技术 - MVC(MonoCross)或MVVM(MonoMobile.ViewsMvvmCross)用于UI“控制器”逻辑;用于“视图级”抽象的MonoTouch.Dialog和MonoDroid.Dialog; CrossGraphics用于UI“绘图”; SQLite.Net数据库;等

我发现MonoTouch,MonoDroid和Microsoft工具在开发跨平台代码方面提供了真正的,显着的好处 - 但你必须努力工作并思考实现这一目标。