我有一个使用 MVVM 模式编写的跨平台项目(没有使用特定的框架,只是自己编写的实现)。项目有几个独立的模块,每个模块都有几个页面。每个页面都有 ViewModel 和某种负责面向数据的逻辑(获取、保存、删除、转换等)的管理器。所以数据流看起来是这样的:
虚拟机 -> 管理器 -> 服务 -> 管理器 -> 虚拟机
加载 VM 时,它会向管理器询问数据。Manager 执行服务调用,获取数据,从 DTO 构造模型集合,将此集合返回给 ViewModel,ViewModel 将模型集合转换为要在列表中呈现的 ViewModel 集合。
现在我正在寻找一种使用 Rx 实现这种逻辑的方法。大多数页面都有一个要编辑的主列表(插入、删除、修改的项目)和几个支持集合(某些组合框的提供者可以从中选择值)。支持集合可以通过标准的 async/await 调用或通过将任务转换为 Rx 轻松检索 - 它们没有问题。但可修改的列表是。在不破坏 Rx 逻辑的情况下,我无法弄清楚如何在页面的整个生命周期内跟踪此列表中的更改。我有订阅选项:
IEnumerable<Model>
Task<IEnumerable<Model>>
IObservable<IEnumerable<Model>>
但我想我必须订阅,IObservable<Model>
因为我需要一种方法来跟踪个人更改。我需要一种从其他方法(如添加、删除或编辑)修改此集合的方法。那么我应该IObservable
通过Observable.Create
(或其他方法)创建并存储IObserver
在 Manager 内的某个地方以调用OnNext
或OnError
其他方法吗?但它看起来不像是 Rx 的做法。你对我的问题有什么建议吗?任何建议表示赞赏。谢谢。
PS:你可能会说 Rx 不是解决我跟踪可修改列表问题的最佳方法,因为它不是无穷无尽的事件流,我必须自己推送修改,但 Rx 有非常方便的过滤数据和处理错误的方法,所以我'我真的很期待在应用程序中实现它。