2011-03-11 68 views
2

所有,关于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(); 
     } 
    } 

在此先感谢您的任何想法和回应。

回答

4

在MVP中,您不应该使用其他演示者的方法。这个观点现在应该只是关于它自己的主持人的存在。即使这样的知识应该尽可能少。演示者控制并调整视图。否则。 (MVP的被动视图变体)

如果另一个演示者有一些代码需要重用,而不是将其抽象为辅助类中的辅助方法。如果有一个通用的UI元素(多个控件),然后将其放在一个用户控件中,以便您可以重复使用它。

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

string comments = collab.LoadComments(); 

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

+0

+1帮助方法。 您也可以考虑创建一个包含您的代码的基本演示者类。 – 2011-03-22 13:59:36

+0

谢谢你的TurBas;像你说的那样抽象为辅助方法是有意义的,这是我将要使用的方法。我对MVP来说是个新手,我正在接受另一位开发人员在我参加的一个项目中放弃的位置,似乎他们正在使用从演示者方法拉出来的视图,我认为这是一种方式,为了保持一致性,我坚持使用它。你能简单解释一下吗?最好。 – Ian 2011-03-23 11:46:30