首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用Exrin中的操作、模型和服务

正确使用Exrin中的操作、模型和服务
EN

Stack Overflow用户
提问于 2017-06-13 18:23:50
回答 1查看 38关注 0票数 1

在Exrin中,使用ViewModel的正常层次结构可以访问IModelModel可以访问IService,而Operation通常可以从ViewModel调用IModel,在每个范围内如何正确使用方法和交互?

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

我可以重写OnAppearing方法(可能会将其更改到生命周期中的另一个点),以调用Model.ClearUserInputTables方法,或者创建一个可以访问ModelOperation来执行同样的任务。埃克斯林最喜欢哪一种?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-14 02:17:56

操作的目的是接受ViewModel之外的代码,因此它可以

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

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

如果要在导航到页时清除表,我可以建议

代码语言:javascript
复制
OnNavigated

这只在页面第一次加载时调用一次。

代码语言:javascript
复制
OnBackNavigated

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

代码语言:javascript
复制
OnAppearing

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

因为一个操作本质上是ViewModel的一部分,所以您可以将它们看作是一个操作。因此

代码语言:javascript
复制
Operation -> Model -> Service -> Repository (ClearDB)

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

顺便提一句,我意识到运营可能会有很大的开销。它们是可选的。如果您并不真正需要这个答案开头列出的好处,那么您可以直接从OnAppearing调用模型,而无需使用操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44528881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档