【问题标题】:Cross-platform xamarin application and native library bindings跨平台 xamarin 应用程序和本机库绑定
【发布时间】:2014-03-07 03:35:08
【问题描述】:

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

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

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

我对任何可以避免失去数月工作的迁移建议/策略持开放态度,因此如果您有任何迁移建议/策略,请随时回答 :)

【问题讨论】:

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


    【解决方案1】:

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

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

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

    是什么让你有这样的想法?你可以绑定任何你想绑定的东西。而且您无需绑定所有内容即可开始。如果现在您只想绑定处理 UI 的本机库中的某些部分,则跳过其余部分。您可以稍后添加绑定。

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

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

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

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

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

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

    【讨论】:

    • 是的,我现在有两个库。理想的解决方案是绑定所有内容而不更改任何内容到第一个应用程序的库,然后对于下一个应用程序,重写库的最小可能部分,几个月后再次重写所有内容,所以我会完全放弃 Obj- C/Java。问题是只绑定模型部分是没有用的,因为例如在 iOS 上,Xamarin 不支持 CoreData,所以我不能扩展我的核心数据模型(添加实体,或从现有的继承)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多