使用WinForms的MVP模式 - 访问用户输入的正确方法?

时间:2015-05-11 18:14:22

标签: c# winforms mvp

我正在使用MVP模式编写应用程序,并且好奇是否存在"正确的"将用户输入从View传递到Presenter的方法。

例如,我有一个简单的搜索表单,其中包含一个文本框和一个"搜索"按钮。在Presenter中,我有一个执行搜索的函数,并使用结果填充View。在搜索按钮的Click事件中,我在Presenter中调用搜索功能。

我的问题是,是否首选将用户输入作为参数传递给Presenter中的搜索功能,还是最好在视图中为演示者创建一个Get访问器来检索用户输入?

示例 -

在视图中:

private void btnSearch_Click(object sender, System.EventArgs e)
{
    presenter.Search(txtUserInput.Text);
}

在演示者中:

public void Search(string userInput)
{
    //perform search
}

OR

在视图中:

public string UserInput
{
    get { return txtUserInput.Text; }
}

private void btnSearch_Click(object sender, System.EventArgs e)
{
    presenter.Search();
}

在演示者中:

public void Search()
{
    string userInput = view.UserInput;

    //perform search
}

1 个答案:

答案 0 :(得分:1)

我通常使用您的第二种方法实现它。

Presenter方法通常不接收任何参数并从IView收集数据。

在我看来,视图公开了状态,行为在“无状态”Presenter中实现(唯一的状态是对视图和注入依赖项的引用)。

这提供了一种非常简单的方法,可以针对模拟视图对演示者进行单元测试,以及创建IViewPresenter时非常简单的指南:

  • 通过UI中的控件公开的所有数据都应该是IView界面中的属性(通常为ValueTypes,以使其与Winforms无关)。
  • 所有行为,例如处理每个按钮的逻辑和初始化应该是Presenter方法。