3

在 Xamarin 跨平台应用程序开发中适配 MVVMCross 框架,我们有 PCL(包含模型和视图模型)和视图(针对每个平台),如这里

a) Xamarin.mobile(用于获得一组 API 访问权限)驻留在哪里?我认为在 PCL 内部。但是,我看到 Xamarin.mobile 的不同二进制文件(例如:Android 和 IOS),我们是否将所有 Xamarin.mobile 库都放在 PCL 中?都是同名的,不会有冲突吧?

b) 我们在哪里保存访问蓝牙之类的代码(在 Xamarin.mobile 中不可用)?使用 MVVMCross 解耦了视图和业务逻辑,那么在事件发生后(btn 点击)创建视图项的所有代码都驻留在视图中吗?

c) 我们在哪里可以使用适应 MVVMCross 的条件编译?我猜在模型中,但它是仅用于文件访问还是也可以通过将其放置在 PCL 上来根据目标平台显示视图项(Android 上的 toast 消息)?

(如果不合适,请原谅,只是收集了一些关于 MVVMCross 和 Xamarin.mobile 的信息,并有一些推理/困惑)

谢谢你!

问候, 索拉夫

4

1 回答 1

5

a) Xamarin.mobile(用于获得一组 API 访问权限)驻留在哪里?我认为在 PCL 内部。但是,我看到 Xamarin.mobile 的不同二进制文件(例如:Android 和 IOS),我们是否将所有 Xamarin.mobile 库都放在 PCL 中?都是同名的,不会有冲突吧?

Xamarin.Mobile 不是可移植代码 - 它不能直接从 PCL 调用。

对于许多 Xamarin.Mobile 功能(以及 Xamarin.Mobile 未涵盖的许多功能),MvvmCross 提供插件 - 您可以在https://www.nuget.org/packages?q=mvvmcross中看到其中的一些

对于 XM 具有但我们尚未包含的其余几个方法 - 例如联系人查找 - 然后您可以:

  • 通过编写可移植的接口(外观)来访问 Xamarin.Mobile 函数,通过该接口可以访问它们
  • 编写一个新插件来实现它们

有关插件的更多信息:

b) 我们在哪里保存访问蓝牙之类的代码(在 Xamarin.mobile 中不可用)?

通常,这与上述方法相同。例如,对于蓝牙,请看 Sphero 示例:

使用 MVVMCross 解耦了视图和业务逻辑,那么在事件发生后(btn 点击)创建视图项的所有代码都驻留在视图中吗?

是的 - 如果它是一个“视图问题”,那么它属于视图(这与任何 Mvvm 代码相同)

c) 我们在哪里可以使用适应 MVVMCross 的条件编译?

我尽量不使用“条件编译”,包括#ifand partial classes。有时我会在特定于插件平台的模块中使用它,但通常我会尝试使用继承或抽象来代替——原因是因为我经常使用“重构”和“单元测试”等工具,而条件编译根本不会与这些一起工作。

有关使用 PCL 而不是文件链接和其他基于项目的技术的好处(和缺点)的更多信息,请参阅使用可移植类库而不是使用“添加为链接”有什么好处?

于 2013-05-15T11:50:40.850 回答