MVP指导 - 演示者实例化的合法性

时间:2011-03-11 10:43:02

标签: asp.net mvp

全部,关于MVP的问题:

我有一个页面,反对视图。我们称之为IMyView。

我有一个演示者,填充视图。我们称之为MyViewPresenter。

我有另一个演示者,与另一个观点一起工作。它提供了一个名为'LoadComments()'的方法。我们称之为演示者MyOtherViewPresenter。

从我对IMyView起作用的页面,我想从MyOtherViewPresenter调用LoadComments()方法,但就MVP的“合法性”而言,我想知道是否应该允许这样做。

我的问题是,如何使用其他使用其他视图的演示者提供的方法,从使用看似无关的视图的页面开始?我应该专注于在我的页面应该使用的演示者中提供相同的演示者方法,还是可以在每个视图中使用多个演示者,例如

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            MyViewPresenter presenter = new MyViewPresenter(this);
            presenter.LoadProduct();

            MyOtherViewPresenter collab = new MyOtherViewPresenter();
            string comments = collab.LoadComments();
        }
    }

提前感谢任何想法和回应。

1 个答案:

答案 0 :(得分:4)

在MVP中,您不应该使用其他演示者的方法。现在应该只看到它自己的演示者的存在。甚至那些知识应该尽可能少。演示者控制并调整视图。不是这样。 (MVP的被动视图变体)

如果另一个演示者有一些你想要重用的代码而不是将它抽象为辅助类中的辅助方法。如果有一个共同的UI元素(多个控件),那么将它放在一个usercontrol中,这样你也可以重用它。

如果您使用被动视图,则演示者会将信息推送到视图。在您的代码中:

string comments = collab.LoadComments();

这是拉动信息的观点。它不应该这样做。 但这是一个完全不同的讨论: - )