2014-01-24 108 views
0

我正在製作聯繫人應用程序,並且我有兩個視圖和兩個演示者(contactList和contactForm),兩個視圖都有一個工具欄,並且在該工具欄中我需要用一些複雜的邏輯創建一個搜索小部件。mvp中的重疊視圖

首先,我必須爲小部件實現一些clickHandlers,並且必須只有一個邏輯實例,所以我不能在兩個演示者中創建兩個處理程序副本。

現在我想我需要用處理程序的邏輯創建一個新的searchPresenter,但是如何實例化新的演示者?是否應該在其他演示者中實例化?如何看待它,是否應該在其他視圖中實例化?

所以這就是我傾向於這樣做:

兩個contactListView和contactFormView創建搜索查看

toolbox.add(new SearchView()); 
兩個主持人

創建searchPresenter交工視圖(請注意,我需要得到的ContactListPresenter,我會希望避免的觀點,我不想主持人知道該視圖的任何東西):

initSearchPresenter() { 
    this.searchPresenter = new SearchPresenter(view.getSearchView) 
} 

和我n個控制器添加initSearchPresenter通話,旁邊既創造主持人:

contactForm = new ContactFormPresenter(new ContactFormView()); 
contactForm.initSearchPresenter(); 
contactList = new ContactListPresenter(new ContactListView()); 
contactList.initSearchPresenter(); 

我的問題是,這是解決這個問題的正確途徑,或者我應該做一個完全不同的東西?

回答

0

您必須在每個想要顯示它的小部件中創建一個視圖。但是您可以爲視圖的兩個實例使用相同的演示者。

有兩種方法可以做到這一點。

1°最乾淨的方法是使用Gin:將您的ContactFormPresenter定義爲一個singleton並將它注入到兩個視圖中。

2°使用「ClientFactory」。在客戶端工廠中創建ContactFormPresenter並將其引用到您的兩個視圖中。