跨平台xamarin应用程序和本机库绑定

时间:2014-02-09 23:18:10

标签: android ios xamarin.ios cross-platform xamarin

我目前有一个原生的Android和iOS库,其中包含由模型(最小的部分),视图和控制器(最大的部分)组成的不同“模块”。

我想开始使用xamarin编写应用程序而不会丢失我在这个库上所做的所有工作。但似乎本机库绑定更适合实用程序库,或者只包含1部分MVC组件的库,而不是相互依赖的3个。

因此,在阅读了关于跨平台开发和本机库绑定的Xamarin文档之后,我认为我应该使用Xamarin C#库重写我库中的所有模型部分,我会在iOS上删除Core Data,在Android上删除ORM Lite ,而我会使用提供的SQLite库。这项工作听起来并不大,所以这不是问题(从长远来看,它会减少维护工作)。但现在出现了问题/问题,当我的模型将是C#类时,我如何能够在我的控制器中使用这些模型仍然使用Obj-C和Java编写?我可以从我可以在iOS / Android代码中导入的C#模型类中获取头文件吗?或者我是否还需要使用C#重写控制器(对我来说,不使用Xamarin)?

我愿意接受任何可以避免失去多个月工作的迁移建议/策略,所以如果你有一个,请随时回答:)

1 个答案:

答案 0 :(得分:1)

  

我目前有一个原生的Android和iOS库,其中包含由模型(最小的部分),视图和控制器(最大的部分)组成的不同“模块”。

这可能意味着您当前有两个库,一个用于iOS,一个用于Android。一个用Objective-C编写,一个用Java编写。

  

我想开始使用xamarin编写应用程序而不会丢失我在这个库上所做的所有工作。但似乎本机库绑定更适合实用程序库,或者只包含1部分MVC组件的库,而不是相互依赖的3个。

是什么让你这么想?您可以绑定要绑定的任何内容。而且您不需要先绑定所有内容。如果现在你只想绑定本地库中处理UI的一些部分,那么跳过其余部分。您可以稍后添加绑定。

  

我认为我应该使用Xamarin C#库重写我库中的所有模型部分,我会在iOS上删除Core Data,在Android上删除ORM Lite,而是使用提供的SQLite库。

这是一种有效的方法。但是,您将无法继续使用本机代码。没有办法从ObjC谈到C#。反之亦然。即使有可能:你必须改变你的控制器与SQLite.Net而不是CoreData交谈,或者添加一个抽象层,反过来你必须在C#方面绑定和实现。所有这些可能比坚持使用本机版本或重写C#中的所有内容更多。

  

我可以从可以在iOS / Android代码中导入的C#模型类中获取头文件吗?   不,你不能。

     

或者我是否还需要使用C#重写控制器(这对我来说是不合法使用Xamarin)?   您可以选择:

  • 坚持使用您所拥有的东西并忍受维护两个库(和两个应用程序代码库)的限制
  • 绑定库并围绕它们创建托管抽象。然后使用PCL中的这个抽象,并从您的Xamarin C#和Android应用程序中引用该PCL。使用此解决方案,直到您不满意维护两个代码库,然后:
  • 重写您的本机代码并切换到Xamarin并拥有一个代码库。

可能还有一个关于绑定的注释:绑定并不意味着交换部分本机功能。它们将本机功能传输到托管世界。它们不会让您选择两全其美,然后创建一个所有交易解决方案的杰克。 如果你留在原生世界,你最终会得到相同的结果:想想如果你想从iOS上的CoreData更改为基于Json的存储,你必须做什么?您必须触摸所有控制器,除非您准备好所有内容以支持数据层的抽象。