2011-08-24 2 views
16

나는 뷰와 컨트롤러를 가지고 그들 사이의 관계를 최소화하는 좋은 방법을 찾으려고 노력 중이다.MVC 시나리오에서 자바 이벤트와 콜백 비교

var customers = { 
    get: function(callback) { 
     $.get('/customers', {}, function(data) { 
      callback.call(this, data); 
     }); 
    } 
}; 

그리고이 같은 이벤트 중심의 접근 방식 (이벤트 객체 단지 의사 코드) :

하나 개의 이벤트에 여러 가입자에서 제외

, 주요 같은 JS 코드 사이에 차이가있다

var customers = { 
    get: function() { 
     $j.get('/customers', {}, function(data) { 
      event.publish('customers.loaded', data); 
     }); 
    } 
}; 

두 경우 모두 고객 개체의 소비자는 내부 동작을 모르고 있습니다. 편도가 다른 편보다 이점이 있습니까?

답변

8

이벤트의 콜백이지만, 차이점은 바인딩되는 시간과 장소입니다. 첫 번째 경우에는 get이 호출 될 때 콜백에 대한 참조가 필요하며 추가적으로 콜백으로 제한됩니다.

두 번째 시나리오에서는 (해당 의사 코드로 이벤트를 트리거한다고 가정 할 때) 더 강력한 데이터 캡슐화를 허용하는 get이 호출 된 범위 밖에서 콜백을 바인딩 할 수 있습니다. 또한 이벤트는 customers 개체에 대한 액세스 권한에 따라 여러 함수가 실행될 수 있도록 여러 콜백을 트리거하는 것을 지원합니다.

자바 스크립트는 이벤트 지향 언어이므로 이벤트 지향 솔루션을 사용하는 것이 좋습니다.

4

대답은 매우 정직 : 이벤트 (콜백 아무것도 없습니다) 무제한 이벤트 핸들러를 가질 수 있기 때문에 ... 그리고 콜백 난 당신이 쪽으로 이동하는 것이 좋습니다, 단지 하나의 콜백 입니다 이벤트 구동 프로그래밍 방법.

4

모듈을 만들 때 콜백 솔루션을 사용하려고합니다. 종속성이 하나 더 적습니다. 이벤트 객체에 대한 종속성.

제 3 자 플러그인을 다운로드하면 지금 작업하고있는 플러그인을 말할 수 있습니다. 기능이 실행되고 내 자신의 선택을 사용하여 내 이벤트를 제기 할 때 호출되는 것을 제어하고 싶습니다. 이벤트 버스.

모듈을 만들지 않으면 두 솔루션 모두 매력이 있다고 생각합니다. :)