2011-03-11 99 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