0

我们正在使用 MVP,但问题本身不一定是 MVP 特定的。基本上,演示者需要知道模型是否发生变化,以便他们可以处理这些变化并将其反映到他们的视图中。

这将很容易在模型中使用事件,但是模型也包含其他模型对象 - 它们可以由不知道根模型或其任何演示者的演示者+视图修改。

这是此类模型的简化示例:

class Document
{
    Header header;
    List<Paragraph> paragraphs;
    Footer footer;
}

假设有两个演示者和视图创建文档的表示;DocumentEditPresenter/-View 和 DocumentPreviewPresenter/-View。

然后会有用于文档组成的模型的模型;HeaderPresenter/-View、ParagraphPresenter/-View 和 FooterPresenter/-View。

DocumentEditPresenter 将在从其视图中获取事件后为段落创建 ParagraphPresenter/-View。然后,此 ParagraphPresenter 将修改段落 - DocumentEditPresenter 和 DocumentPreviewPresenter 都应该获得某种信号来刷新。

我知道一种解决方案是所有模型都包含对其父项和/​​或有关每个可能修改的事件的引用,但它似乎过于复杂并且会使编辑模型容易出错。该模型也应该是可序列化的。

类似于 WPF 的路由事件的东西将是完美的。

4

1 回答 1

0

如果你的模型很深,听到来自“深”的事件会很痛苦。

I would organise my code with managers, acting like facade, so that any modification in the model,even deep, should go through one of the managers . Then, I would raise an event from the manager, and the presenter would listen to it.

Your event could be just "ModelChanged" to trigger a refresh.

于 2013-02-15T23:00:10.510 回答