2010-06-16 117 views
2

当我有一个按钮只改变我的视图中的某些内容(例如,如果我按下它时会出现一些文本),我可以使用我的视图将其整个代码写入文件中,还是应该包含事件处理演示者中的这个按钮?这对我来说是个问题,因为我不知道,如果演示者处理来自视图的所有事件或仅处理这些事件,这会改变模型中的某些内容?mvp设计模式 - 问题

在此先感谢

回答

2

演示仅处理该改变模型的事件。然而,每个程序员自己决定应该放在什么样的模型上,以及完全属于哪个视图

想象一下你需要制作2个按钮的任务,第一个按钮从数据库加载数据并显示它,第二个按钮更改页面的颜色为一些随机值,有两种实现方法:

  1. 车型将拥有LoadedData loadedDataColor color。演示者将以这种方式管理这两个按钮。
  2. 可以确定颜色是演示部分的一部分,并且与模型无关。这样 - 模型中就没有颜色了,所有随机颜色生成和按钮甚至处理都会出现在视图中。

因此,总结一下,如果您想/需要/决定将该文本放入模型中 - 演示者可以并且应该管理该按钮。但是,如果该文本与主逻辑无关并且是演示文稿的一部分(某些设计元素),则不应将其放入模型中,也不应由演示者进行管理。

0

我认为这取决于你感觉舒适。 就个人而言,我更喜欢被动视图的实现,但如果我没有做到, 被动视图和监督控制器都会规定视图 应该由演示者进行更新(除了在监督控制器的情况下简单数据绑定的情况 ) 。 另一个例外可能是如果你的视图是一个Web窗体,你想通过JavaScript更新它的客户端。

你可以看看下面的例子:

http://msdn.microsoft.com/en-us/library/ff647543.aspx

在这里你可以找到段落:查看更新

“当更新模型,视图也必须更新,以反映更改视图更新可以通过多种方式处理Model-View-Presenter变体Passive View和监督控制器指定实现视图更新的不同方法

在被动视图中,演示者更新视图以反映模型中的更改。与模型的交互仅由演示者处理;该视图不知道模型中的更改。

在监督控制器中,视图直接与模型进行交互以执行简单的数据绑定,可以声明方式定义简单的数据绑定,无需演示者介入。演示者更新模型;它仅在无法声明性地指定复杂UI逻辑的情况下操纵视图的状态。复杂的UI逻辑的例子可能包括改变控制的颜色或动态地隐藏/显示控制。”

希望它是有帮助的

利玛