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