2016-07-11 2 views
0

У меня есть архитектура Vaadin MVP, и в течение некоторого времени я испытываю проблему с круговыми зависимостями между презентаторами.Циркулярные зависимости в бобах MVP-Presenter (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()); 
    } 
} 
Смежные вопросы