在mvp中重叠视图

时间:2014-01-24 14:30:03

标签: java gwt mvp

我正在创建一个联系人应用程序,我正处于这样一个位置:我有两个视图和两个演示者(contactList和contactForm),两个视图都有一个工具栏,在该工具栏中我需要进行搜索具有一些复杂逻辑的小部件。

首先,我必须为窗口小部件实现一些clickHandler,并且必须只有一个逻辑实例,所以我不能在两个演示者中制作两个处理程序副本。

现在我认为我需要使用处理程序的逻辑创建一个新的searchPresenter,但是如何实例化新的演示者?它应该在其他演示者中实例化吗?视图怎么样,应该在其他视图中实例化吗?

这就是我倾向于做的事情:

在contactListView和contactFormView中的

创建searchView

toolbox.add(new SearchView());

在两个演示者中创建searchPresenter并移交视图(注意我需要在ContactListPresenter中获取视图,我希望避免使用,我不希望演示者知道有关视图的任何信息):

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

并在控制器中添加一个initSearchPresenter调用,旁边创建两个演示者:

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

我的问题是,这是解决这个问题的正确方法,还是应该做一个完全不同的事情?

1 个答案:

答案 0 :(得分:0)

您必须在要显示它的每个小部件中创建一个视图。但是您可以对视图的两个实例使用相同的演示者。

您有两种方法可以做到这一点。

1°最干净的方法是使用Gin:将ContactFormPresenter定义为单例并将其注入两个视图中。

2°使用“ClientFactory”。在客户端工厂中创建ContactFormPresenter并提供对两个视图的引用。