我正在使用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
}
答案 0 :(得分:1)
我通常使用您的第二种方法实现它。
Presenter
方法通常不接收任何参数并从IView
收集数据。
在我看来,视图公开了状态,行为在“无状态”Presenter中实现(唯一的状态是对视图和注入依赖项的引用)。
这提供了一种非常简单的方法,可以针对模拟视图对演示者进行单元测试,以及创建IView
和Presenter
时非常简单的指南:
IView
界面中的属性(通常为ValueTypes,以使其与Winforms无关)。Presenter
方法。