MVP - 视图是否应该能够直接调用presenter方法,还是应该始终引发事件?

时间:2010-02-04 23:05:33

标签: asp.net mvp

我一直在使用ASP.NET的MVP模式。我坚持从视图中提升演示者事件的定义模式。

让我感到震惊的是,我可以在演示者中公开视图可以直接调用的方法。

从技术上讲,使用直接方法调用将需要更少的代码。另一个好处是我倾向于在提供类似功能的多个视图中共享演示者。这意味着有时某些事件处理程序被强制在视图中注册,只是为了符合共享的演示者界面,但根本不在该特定视图中使用。

这样的一个例子是日记视图,在一个视图中允许您取消约会,而在另一个视图中则不允许。用于加载数据和保存约会的其余演示者事件均在两者中使用。我不想写两个几乎提供相同功能的独立演示者。

我想听听其他人认为谁在积极使用MVP。您是否有任何理由可以想到为什么从视图到演示者的直接方法调用在MVP中是不好的?

3 个答案:

答案 0 :(得分:4)

我使用直接方法调用,并且没有看到任何有理由在演示者上定义事件的原因。您对事件使用的内容称为“Observing Presenter”风格。它确实提供了View与Presenter的完全解耦,但增加了复杂性。

答案 1 :(得分:2)

如果您的视图直接调用演示者,那么它将像mvc一样紧密耦合。我不明白为什么有些框架采用这种方法而不是在视图上引发事件。

答案 2 :(得分:2)

我们可以编写一个包含我们想要从视图调用的所有方法的接口。 Presenter将实现此接口。然后我们可以将此接口的实例传递给视图,并且视图可以在此接口上调用方法。这将减少两者之间的耦合。