2012-09-19 16 views
0

在WinForms应用程序中使用MVP模式我被要求编写。赦免VB.net,因为我被迫使用这个:(MVP模式在视图界面上包含什么

是新来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的一部分,而不是操心利用iView intreface

_presenter.BuildItems() 

_presenter.RunQue() 

你如何权衡何时做EI何时使用MVP?

回答

2

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

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

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

视图接口应包含允许演示者呈现业务对象的视图,以及管理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有一段时间了。

+0

因此,只需使用事件来连接视图中的功能并让演示者使用它们即可。 – HoopSnake