2016-07-11 11 views
0

我有一个Vaadin MVP体系结构,并且一段时间以来,我已经遇到了演示程序之间的循环依赖问题。MVP-Presenter beans(Vaadin)的循环依赖关系

我在演示者中通常会有一个show(...)方法,它将使用导航器更改视图并使用参数显示一些数据。

问题是应用程序越复杂,我在介绍者之间进行循环调用得越多。

A -> B.show(X) 
B -> A.show(Y) 

什么是将数据交给其他演示者的最佳方法,而不会遇到循环依赖问题。

回答

0

我看到两个选项:

  1. 使用的事件总线,所以每个主持人都会触发事件未知的观察员。
  2. 将Observer模式与中介一起使用。例如,A和B是需要相互通知的演示者。 C是介体,例如一位高级主持人。 C知道A和B,但A和B只知道他们的观察者。当A想要通知B时,它呼叫观察者C(实现一个A观察者),然后C呼叫B.这样A和B解耦合并且通信被封装在C中。

这里是大纲:

interface A { 
    interface Observer { 
     void onEventX(EventX event); 
    } 

    void setObserver(Observer o); 

    void show(Data data); 
} 

// analog in B 

class C implements A.Observer, B.Observer { 
    private A a; 
    private B b; 

    public C(A a, B b){ 
     a.setObserver(this); 
     b.setObserver(this); 
    } 

    @Override // overrides A's Observer 
    public void onEvent(EventX event){ 
     b.show(event.getData()); 
    } 
}