我第一次尝试使用 Passive View 实现 MVP,但我有点困惑谁在这种模式下通知谁。我知道如果视图发生更改,视图会通知演示者,而演示者又会通知其他所有人(其他视图和模型)。
现在,就我而言,我有多个视图,而且我还有一个可以在 UI 之外更改的模型。可能会发生以下两种情况:
View[i] 发生变化并通知 Presenter。Presenter 需要通知所有其他视图和模型,但不需要通知 View[i]。此外,视图和模型都不能向 Presenter 发送更改通知,即使它们刚刚被修改(否则会出现无限循环的事件)。
模型发生变化并通知 Presenter。Presenter 需要通知所有视图,而不是 Model。但是即使它刚刚被修改,任何视图都不会向 Presenter 发送更改通知。
主持人将如何通知谁,谁不通知?模型如何知道它是否需要发送更改通知?毕竟,它只是被修改,但它不一定知道是谁。
一种可能性是让每个人(模型、视图和演示者)自由地发送更改通知,但在通知中存储对最初触发更改的对象的引用(从而将通知封装在事件对象中)。然后,每个对象仅在他不是更改的原始触发器时才发送通知。但是有没有更简单、更清洁的方法呢?