在Exrin中正确使用操作,模型和服务

时间:2017-06-13 18:23:51

标签: xamarin.forms exrin

在Exrin中,使用ViewModel的正常层次结构可以访问IModelModel可以访问IServiceOperation s有权访问IModelViewModel调用,在每个范围内正确使用方法和交互是什么?

例如,我需要在导航到页面时清除SQLite数据库中的表。我有一个IRepositoryService,其中包含我与数据库交互的所有方法。我的Model有一个ClearUserInputTables方法,可以在IRepositoryService中调用几种不同的方法。

我可以在OnAppearing内覆盖ViewModel方法(可能会将其更改为生命周期中的不同点)以调用Model.ClearUserInputTables方法,或者我可以创建{ {1}}可以访问Operation来执行相同的操作。哪个在Exrin中受到青睐?

也许我需要更好地理解Model的目的。我读了Operation Separation(主要用于导航),但不确定它是否应该用于其他内容(从Operation调用Model方法)。

1 个答案:

答案 0 :(得分:1)

操作设计用于在ViewModel之外获取代码,因此它可以

  1. 轻松进行单元测试(也归功于IResult的回归)
  2. 超时逻辑已添加
  3. 推送到后台主题
  4. 捕捉异常
  5. 确保一次只运行1个操作。 (例如,在最后一个按钮完成之前,停止快速点击按钮多次点击操作)
  6. 然而,

    操作是完全可选的。你不必使用它们。

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

    OnNavigated
    

    仅在首次加载页面时调用此方法。

    OnBackNavigated
    

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

    OnAppearing
    

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

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

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

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

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