Caliburn + Xamarin 导航
Caliburn + Xamarin navigation
背景:
我们将 Caliburn.Micro 3.0.0-beta2 与 WPF + Xamarin iOS / Android 项目一起使用,我们希望确保视图模型可以跨平台重用尽可能多的代码。
我们一直在研究如何将我们的导航抽象为可测试的、跨平台的,因此可以在视图模型而不是视图中调用。
我想知道是否有人对我们应该如何处理应用程序导航提出建议。我们的屏幕要求我们在导航时将一些数据(例如数据库 ID)注入屏幕。目前,我们通过将数据注入视图并将其传递到视图模型中,使用视图优先的方法来完成此操作,但这感觉并不理想,因为它应该真正进入视图模型,因为它是视图逻辑(对?).
使用 ViewModelLocator.LocateForView(this);
为视图视图创建视图模型,然后使用 SimpleContainer 满足我们的其余依赖项。
我们了解到,根据 https://github.com/Caliburn-Micro/Caliburn.Micro/issues/142,导航尚未在 3.0.0 中实现。我们真的在寻找一种我们可以进行导航的方法,该方法可能类似于即将实施的 Caliburn.Micro 解决方案,并希望在可能的情况下为此做出贡献。
问题:
- 我们如何将数据放入视图模型而不是视图中以使其更易于测试并更类似于我们的 WPF 应用程序需要如何工作?
- 这对于移动应用程序是否明智,或者我们应该采用视图优先的方法吗?如果是这样,什么是可测试的方法?
除非您设置了 Caliburn.Micro 视图优先方法(可以完成,这里有一个示例)该框架本质上几乎完全是视图模型优先。我发现首先在视图中工作相当困难。我的大部分 "screens" 都是围绕所讨论的视图模型开发的。考虑到这一点,我有时也会根据操作(添加/编辑/详细信息/列表)为每个视图模型设置多个视图。
1) DI,通常通过存储库或其他具有这种性质的上下文,然后使用 BindableCollection 来保存和通知视图的更改。与 WPF 的工作方式几乎相同。最近我的代码开始跨平台(WP 到 WPF,现在更通用)以帮助减少我的头痛。大多数使用的模式是 DI(SimpleContainer)、Repository (EF 6x)、Pub/Sub (IEventAggregator)。一个例外是 Repository,但在某种程度上我仍然在 WP 上使用它,但自从我使用 Sqlite 以来,直到最近 EF 都没有问题(EF 7 来救援)...
2) 做舒服的事。如果您习惯使用 Fakes,那就去做吧。只要您最终获得所需的正确结果,这并不重要。当然,我确信每个测试都会针对它们所测试的平台进行微调。由于每个平台都有自己必须考虑的细微差别。
背景:
我们将 Caliburn.Micro 3.0.0-beta2 与 WPF + Xamarin iOS / Android 项目一起使用,我们希望确保视图模型可以跨平台重用尽可能多的代码。
我们一直在研究如何将我们的导航抽象为可测试的、跨平台的,因此可以在视图模型而不是视图中调用。
我想知道是否有人对我们应该如何处理应用程序导航提出建议。我们的屏幕要求我们在导航时将一些数据(例如数据库 ID)注入屏幕。目前,我们通过将数据注入视图并将其传递到视图模型中,使用视图优先的方法来完成此操作,但这感觉并不理想,因为它应该真正进入视图模型,因为它是视图逻辑(对?).
使用 ViewModelLocator.LocateForView(this);
为视图视图创建视图模型,然后使用 SimpleContainer 满足我们的其余依赖项。
我们了解到,根据 https://github.com/Caliburn-Micro/Caliburn.Micro/issues/142,导航尚未在 3.0.0 中实现。我们真的在寻找一种我们可以进行导航的方法,该方法可能类似于即将实施的 Caliburn.Micro 解决方案,并希望在可能的情况下为此做出贡献。
问题:
- 我们如何将数据放入视图模型而不是视图中以使其更易于测试并更类似于我们的 WPF 应用程序需要如何工作?
- 这对于移动应用程序是否明智,或者我们应该采用视图优先的方法吗?如果是这样,什么是可测试的方法?
除非您设置了 Caliburn.Micro 视图优先方法(可以完成,这里有一个示例)该框架本质上几乎完全是视图模型优先。我发现首先在视图中工作相当困难。我的大部分 "screens" 都是围绕所讨论的视图模型开发的。考虑到这一点,我有时也会根据操作(添加/编辑/详细信息/列表)为每个视图模型设置多个视图。
1) DI,通常通过存储库或其他具有这种性质的上下文,然后使用 BindableCollection 来保存和通知视图的更改。与 WPF 的工作方式几乎相同。最近我的代码开始跨平台(WP 到 WPF,现在更通用)以帮助减少我的头痛。大多数使用的模式是 DI(SimpleContainer)、Repository (EF 6x)、Pub/Sub (IEventAggregator)。一个例外是 Repository,但在某种程度上我仍然在 WP 上使用它,但自从我使用 Sqlite 以来,直到最近 EF 都没有问题(EF 7 来救援)...
2) 做舒服的事。如果您习惯使用 Fakes,那就去做吧。只要您最终获得所需的正确结果,这并不重要。当然,我确信每个测试都会针对它们所测试的平台进行微调。由于每个平台都有自己必须考虑的细微差别。