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の一部であり、Iviewインターフェイスを気にしないプレゼンターに直接電話をかけます。

すなわち

_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;
}

ビューインターフェイスには、プレゼンターがビジネスオブジェクトをビューに表示したり、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 に答える