2012-03-31 70 views
0

我檢查了MVP模式的幾個不同的例子,我發現它的各種實現。我不清楚哪一個應該包含另一個:視圖還是主持人?正確的MVP遏制方向?

,顧名思義它:

public MyPresenter(){ 
    display = new MyView(this); 
} 

或我的理智邏輯(和wikipedia頁關於MVP)

public MyView(){ 
    presenter = new MyPresenter(this); 
} 

,或者我應該使用的東西完全地不同的方式創建這些對象?

回答

5

DOM是瀏覽器中最昂貴的東西之一,所以構建小部件在GWT中花費很大。相反,主持人一般都很便宜,所以他們可以隨意丟棄和重建。

這就是爲什麼我建議作爲一個經驗法則,試圖跨越很多演示者重複使用您的視圖(使他們成爲單身人士或緩存他們幾分鐘)。

這意味着您的(短暫的)演示者應引用您的(長壽命)視圖。

我是依賴注入的堅定信徒,所以我不會在另一箇中實例化一個。這極大地幫助管理組件的生命週期,每一個都獨立於另一個。
因此,您可以將視圖注入演示者:創建演示者,選擇視圖(創建視圖或從緩存中獲取視圖)並將其提供給演示者。然後,您將摧毀演示者並在下次需要時重複使用該視圖(與另一位演示者一起)。

+0

+1用於指出瀏覽器中昂貴的東西。考慮到這一點,我認爲我可以更好地構建我的項目。我只是開始GWT和DI是我也必須學習的東西(我只知道設計模式,但沒有框架),我會檢查出杜松子酒/ guice。 – Croo 2012-03-31 16:21:08

2

使用MVP模式的主要原因之一是隔離Presenter中的邏輯,以便它可以進行單元測試。

如果你這樣做:

public MyPresenter(){ 
    display = new MyView(this); 
} 

您將無法進行單元測試您的主持人不延長GWTTestCase,這是緩慢的。 所以我更喜歡:

public MyPresenter(MyViewInterface view){ 
    this.view = view; 
} 

凡MyView的實現MyViewInterface。該接口可以用真正的MyView實現來插入,或者是一個測試實現,它不需要啓動GWT上下文進行測試。