MVPVM - 使用Interface或Presenter进行事件处理

时间:2012-09-11 15:33:11

标签: c# winforms design-patterns mvvm mvp

处理按钮单击,行双击和其他事件。什么是更好的方法?

将演示者直接访问到View。因此视图可以直接在演示者上调用适当的方法,例如。 Presenter.Save()

界面中的事件。

interface ILoginDetailView:
{
   event EventHandler Save;        
}

查看

private void btnSave_Click(object sender, EventArgs e)
{
   Save(this, null)
}

演示

view.Save += new EventHandler(view_Save);

我觉得第二种方法更好,因为它使视图与演示者分离。但是在描述模式的所有文章/论文中,都使用了第一种方法。

4 个答案:

答案 0 :(得分:3)

就个人而言,我总是采用第二种方法。一般来说,我不喜欢让观众了解演示者,并且解耦是一个很大的优势。否则,我发现自己正在从视图中获取特定变量的函数。事件模式很好地打破了。

答案 1 :(得分:2)

我也会采用第二种方法,因为正如你所说,将视图与演示者分离,这反过来使这些东西变得可测试。

答案 2 :(得分:2)

在MVPVM(模型视图演示者视图模型)模式中,它表明视图通常与视图紧密耦合。这样,您的视图模型,视图和业务/数据访问层就可以保持解耦。

因此,演示者可以严格允许直接访问视图,而不会对视图模型或视图添加任何责任。

MVPVM Design Pattern

这是一篇很棒的文章,很好地讨论了MVC,MVP,MVVM和MVPVM。

答案 3 :(得分:1)

我认为第一种方法更清洁。

保存只是感觉不像事件。这是一个直接行动。

在MVVM中,你在viewmodel上调用一个命令,在MVC中你在控制器上调用一个动作,在MVP中你在调用者上调用一个方法。

已保存保存是一个事件,但不是保存

但这可能是个人偏好的问题。