2012-11-23 2 views
0

일부 독립 모듈을 표시하는 페이지가있는 MVP로 설계된 Java 응용 프로그램이 있다고 가정 해 보겠습니다. 그 중에서도 우리는 고려해야 할 두 개의 독립적 인 MVP 모듈이 있습니다. 여기에는 언급 된 모듈이 통신 할 수있는 기능이 앱에 있습니다. 모듈은 기능을 위해 헌신 된 인터페이스 (API) A 및 B를 제공합니다. 이 기능에 대한 논리를 처리 할 관리자 (M)도 있습니다. 관리자는 고려 된 기능에 참여해야하는 모듈에 대한 참조를 얻기 위해 페이지를 통해 트래버스 (또는 일부 컨텍스트 사용) 할 수 있습니다. 디자인 패턴 - 이벤트 또는 직접 참조

관리자의 코드의 다음 조각 나는 생각하고 접근 방법 제시

다음 EventBus

eventBus.addHandler(Event.CHECK_A_IS_OK, new CheckAIsOkHandler(Event e){ 
    eventBus.fireEvent(Event.DO_SOMETHING_ON_B, e.getValue(); 
}); 
eventBus.fireEvent(Event.CHECK_A_IS_OK); 
  • 를 통해 비동기 이벤트를 사용

    1. 를 사용하여 직접 참조

      A a; 
      B b; 
      
      void findModules(){ 
          a = context.findA(); 
          b = context.findB(); 
      } 
      
      ... 
      
      if (a.check()){ 
          b.doSomething(B.getValue()); 
      } 
      

    질문은 다음과 같습니다 :

    개체 사이의 정기적 인 통신 (조건 확인, 값 반환 등)에 EventBus를 사용해도됩니까? 아니면 실제 이벤트에만 이벤트 패턴을 사용하는 것이 좋습니다 (구독자에게 무언가가 발생했다는 것을 알려주는 것)? 두 번째 접근법을 따르기 위해 느슨한 결합에 반대합니까? 어쩌면 다른 패턴이 더 적합할까요?

    직관적으로 두 번째 apprach는 나를 위해 더 깨끗합니다.

  • 답변

    1

    나는 그것이 모두 당신이 당신의 코드의 관점에서 달성하려고 노력하고 있다고 생각한다. 나를 위해 두 번째 approch 깨끗한 무엇이 필요한 상태를 기댈입니다. 그것은 느슨한 결합 코드가 아니지만 깨끗하고 분명하고 나는 이것이 두 번째 접근법의 부가 가치라고 생각합니다 :).

    +0

    감사합니다, fatfredyy. 나는 다소 공식적으로 하나 또는 다른 접근법을 정당화 할 수있는 해답을 찾고있었습니다. – rafalry

    +0

    소프트웨어 작성이 독창적이고 프로그래머가있는 것처럼 많은 방법으로 무언가를 쓸 수 있기 때문에 어려울 수 있습니다. 정당성은 IDE 사이에서 코드 간 명확한 참조가 표시되지만 관찰자와 이벤트 리스너는 표시되지 않습니다. – fatfredyy