MonoTouch和MonoForAndroid之间的代码共享

Arv*_*vis 5 monodevelop xamarin.ios xamarin.android

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

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

  1. 你打算用什么:网络文件共享或一些代码版本控制(git,svn)?在我的情况下,我使用两个工作站 - Mac(MonoDevelop与MonoTouch)和PC(Visual Studio与MonoDroid).
  2. 那么Solution/Project文件夹结构怎么样?在"博客文章:Xamarin移动世界大会2012非官方会议应用程序发布! "示例结构相当混乱:一个文件夹中的几个解决方案,然后在一个子文件夹中具有不同文件夹和项目名称的不同平台项目.用IDE无法实现它.他们是否在IDE环境之外编辑解决方案文件和文件夹名称的内容?
  3. 对于通用代码的项目,使用什么样的配置文件(模板)?Monotouch有几个:空项目,MonoTouch库项目和MonoTouch绑定项目?在Android我supose - Android类库?

Gre*_*les 12

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

  1. 视频:跨平台移动开发
  2. 博客文章:适用于Windows Phone 7,MonoDroid和Beyond的共享库
  3. 书:使用C#进行移动开发
  4. 博客文章:Xamarin移动世界大会2012非官方会议应用程序发布!

编辑(回答你的新问题)

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

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

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


Stu*_*art 8

免责声明:我有一个特定的Mvvm方法,我用它来跨多平台项目共享代码......

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

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

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

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