MVP-Presenter bean中的循环依赖关系(Vaadin)

时间:2016-07-11 12:42:47

标签: spring vaadin mvp

我有一个Vaadin MVP架构,一段时间以来,我在演示者之间存在循环依赖关系的问题。

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

问题是应用程序越复杂,我在演示者之间进行循环调用就越多。

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

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

1 个答案:

答案 0 :(得分:0)

我看到两个选项:

  1. 使用事件总线,因此每个演示者都会向未知的观察者发射事件。
  2. 将Observer模式与介体一起使用。例如,A和B是需要相互通知的演示者。 C是介体,例如高级主持人。 C知道A和B,但A和B只知道他们的观察者。当A想要通知B时,它调用它的观察者C(A观察者的实现),然后C调用B.这样A和B被解耦,通信被封装在C中。
  3. 这是一个大纲:

    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());
        }
    }