我正在使用MVP模式编写应用程序,并且很好奇是否存在“正确”的方式将用户输入从“视图”传递到“演示者”。
例如,我有一个带有文本框和“搜索”按钮的简单搜索表单。在Presenter中,我有一个函数来执行搜索并用结果填充View。在搜索按钮的Click事件中,我在Presenter中调用搜索功能。
我的问题是,最好将用户输入作为参数传递给Presenter中的搜索功能,还是最好在View中创建Get访问器以供Presenter检索用户输入?
范例-
在视图中:
private void btnSearch_Click(object sender, System.EventArgs e)
{
presenter.Search(txtUserInput.Text);
}
在演示者中:
public void Search(string userInput)
{
//perform search
}
要么
在视图中:
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
}
最佳答案
我通常使用您的第二种方法来实现它。
通常不接收任何参数并从Presenter
收集数据的IView
方法。
如我所见,视图公开状态,并且行为是在“无状态” Presenter中实现的(唯一的状态是对视图的引用和注入的依赖项)。
这提供了一种非常简单的方法来针对Mock视图对演示者进行单元测试,并且在创建IView
和Presenter
时提供了非常简单的准则:
通过UI中的控件公开的所有数据都应该是IView
界面中的属性(通常是ValueTypes,使其与Winforms无关)。
所有行为,例如用于处理每个按钮的逻辑以及初始化,均应为Presenter
方法。
关于c# - 带有WinForms的MVP模式-访问用户输入的正确方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30174769/