0

在我被要求编写的 WinForms 应用程序中使用 MVP 模式。请原谅 VB.net,因为我被迫使用它:(

作为 MVP 的新手,我使用了被动模型实现,其中视图和模型之间没有依赖关系,只有演示者知道两者

视图是 UI 的表示,哪些功能应该是 IVIEW 界面的一部分

我是否应该在 IView 中有方法/动作/任务,即

 Property QItems As IList(Of QItem)
    Property SelectedQItem As QItem

    Property QueStatus As QueStatus

    Property ReportName As String
    Property ScheduleName As String

    Sub BuildQItems()

    Sub RunQue()

    Sub StopQue()

    Sub CancelCurrent()

    Sub PauseCurrent()

并使调用查看在 winform 中实现的 Iview 接口

class Winform 
   implements IView


 Private Sub btnCreate_Click(sender As System.Object, e As System.EventArgs) Handles btnCreate.Click Implements IVIEW.Create
    If (_presenter.CreateSchdule()) Then
        MessageBox.Show("Sucessfully Created")
        Close()
    End If
End Sub

End Class

还是我应该只持有状态

 Property QItems As IList(Of QItem)
    Property SelectedQItem As QItem

    Property QueStatus As QueStatus

    Property ReportName As String
    Property ScheduleName As String

并直接调用作为 WinForm 一部分的 Presenter,而不用担心 Iview 接口

IE

_presenter.BuildItems()

_presenter.RunQue()

在使用 MVP 时,您如何权衡何时采用这两种方法?

4

1 回答 1

2

如果您指的是被动视图方法,那么您不应该尝试调用演示者或在视图中编写业务逻辑。相反,视图应该创建一个传递自身引用的演示者实例。登录表单示例:

public LoginView() // the Form constructor
{
   m_loginPresenter = new LoginPresenter(this);
}

public void ShowLoginFailedMessage(string message)
{
   lblLoginResult.Text = message;
}

View 接口应该包含允许演示者向视图呈现业务对象以及管理 UI 状态(间接)的属性。前任:

interface ILoginView
{
   event Action AuthenticateUser;
   string Username { get; }
   string Password { get; }
   string LoginResultMessage { set; }
}

演示者将类似于:

public LoginPresenter(ILoginView view)
{
   m_view = view;
   m_view.AuthenticateUser += new Action(AuthenticateUser);
}

private void AuthenticateUser()
{
   string username = m_view.Username;
   ...
   m_view.ShowLoginResultMessage = "Login failed...";
}

对 C# 代码感到抱歉,但我有一段时间没有接触过 VB.NET。

于 2012-09-20T00:28:56.233 回答