2015-05-11 21 views
1

我正在写一个使用MVP模式的应用程序,并且很好奇,如果有一种“正确”的方式将用户输入从视图传递给演示者。MVP模式与WinForms - 正确的方式来访问用户输入?

例如,我有一个简单的搜索表单,带有一个文本框和一个“搜索”按钮。在Presenter中,我有一个执行搜索的功能,并在结果中填充视图。在搜索按钮的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

我通常使用你的第二个方法是执行。

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

正如我所看到的,视图暴露了状态,行为在“无状态”Presenter中实现(唯一的状态是对视图和注入依赖关系的引用)。

创建IViewPresenter时,这提供了一种非常简单的方法来进行单元测试针对模拟视图中演示,以及一个非常简单的准则:

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

谢谢,这很有道理。 –