mvvm方法是一种很好的方法。不过,想象一下场景:你有一个应用程序页面,用户可以在其中启动一些长期运行的任务。比如本地和远程数据库的同步。此任务可能很长,只应优雅地中断。然后用户离开页面,转到一些详细信息页面。取消长时间的异步操作是没有意义的,因为应用程序仍在运行。但突然用户接到一个电话,应用程序被停用。
在我对mvvm(可能太原始)的理解中,应该使用视图模型来控制与模型的交互(尤其是长操作)。但是视图模型不需要知道应用程序生存期事件,因为这将限制代码的可重用性(在windows 8上没有phoneapplicationservice这样的类)。看到矛盾了吗?vm启动操作,但不应用于取消该操作。
当然,view可以负责处理终身事件。因此,关于应用程序停用的事件正在像这样传播:View -> ViewModel -> (cancels long operation) -> Model。但是,如果用户已经从视图中导航,并且在该视图中启动的某些操作仍在运行,则无法再取消它-视图可以随时被释放。
我只想出了一个主意,那就是在视图模型中处理应用程序生命周期事件。但是,正如我之前所说,我不喜欢这种方法,因为它限制了视图模型的可移植性。有谁能提供更好的解决方案吗?

最佳答案

我只想出了一个主意,那就是在视图模型中处理应用程序生命周期事件。但是,正如我之前所说,我不喜欢这种方法,因为它限制了视图模型的可移植性。有谁能提供更好的解决方案吗?
实际上我看这里没有问题。在mvvm中,view model通常是将视图绑定到模型的“粘合剂”。
为每个平台定制少量的viewmodel代码并不一定会限制viewmodel其余部分的可移植性,特别是在为每个平台抽象并包含在自己的项目中时。
vm启动操作,但不应用于取消该操作。
这强烈建议应该由vm来取消它。如果vm创建了这些操作,那么它实际上拥有这些操作的所有权,这意味着它也应该管理它们的生命周期。

08-25 17:56
查看更多