1

在 Exrin 中,使用可以访问 的正常层次结构,可以ViewModel访问和s通常可以访问尚未从 调用的,每个范围内方法和交互的正确使用是什么?IModelModelIServiceOperationIModelViewModel

例如,我需要在导航到页面时清除我的 SQLite 数据库中的表。我有一个IRepositoryService包含我与数据库交互的所有方法。MyModel有一个ClearUserInputTables方法,它在IRepositoryService.

我可以在 中覆盖该OnAppearing方法(可能将其更改为生命周期中的不同点)ViewModel来调用该Model.ClearUserInputTables方法,或者我可以创建一个Operation可以访问该Model方法来做同样的事情。哪个在 Exrin 中受到青睐?

也许我需要更好地理解Operations 的目的。我阅读了操作分离(基本上用于导航),但不确定它是否应该用于诸如此类的其他事情(Model从 调用方法ViewModel)。

4

1 回答 1

1

操作旨在将代码置于 ViewModel 之外,因此它可以

  1. 轻松进行单元测试(也由于 IResult 的返回)
  2. 添加了超时逻辑
  3. 推送到后台线程
  4. 捕获异常
  5. 确保一次只运行 1 个操作。(例如,在最后一个完成之前多次停止快速单击按钮触发操作)

然而,操作是完全可选的。您不必使用它们。

如果您想在导航到页面时清除表格,我可以推荐

OnNavigated

这仅在页面首次加载时调用一次。

OnBackNavigated

当通过弹出它前面的页面导航到后面时调用。但

OnAppearing

每次看到页面时都会调用,无论您是如何到达那里的。但是,如果这是您想要的,那么它可以用于清除您的数据库表。

因为 Operation 本质上是 ViewModel 的一部分,所以您可以将它们视为与操作相同的级别。因此

Operation -> Model -> Service -> Repository (ClearDB)

您只需通过 Operation 构造函数传递模型。

作为旁注,我意识到操作可能会产生很多开销。它们是可选的。如果您真的不需要此答案开头列出的好处,那么您可以直接从 OnAppearing 调用模型,而无需使用操作。

于 2017-06-14T02:17:56.383 回答