【问题标题】:MVP Pattern with WinForms - Proper way to access user input?带有 WinForms 的 MVP 模式 - 访问用户输入的正确方法?
【发布时间】:2015-05-11 18:14:22
【问题描述】:

我正在使用 MVP 模式编写一个应用程序,我很好奇是否有一种“正确”的方式可以将用户输入从 View 传递给 Presenter。

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

【问题讨论】:

    标签: c# winforms mvp


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,这很有意义。
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2010-09-16
    • 2011-03-17
    • 2012-07-22
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多