2012-06-13 2 views
3

Zend Framework 2의 새로운 Eventmanager를 사용하려고합니다. basic usage을 이해합니다. 하지만 실제 프로젝트에서이 코드를 사용하는 방법이나 코드와 함께 사용하는 방법을 잘 모르겠습니다.Zend Framework 2의 EventManager를 사용하는 방법 (또는 어디에서)?

예 : Rob Allen (위의 링크)의 소개에서 그는 "findById"메소드에서 두 개의 이벤트를 트리거합니다. 리스너 용 코드는 어디로 가야합니까? 필자의 견해로는이 코드를 PhotoMapper 클래스에 넣는 것이 의미가 없거나 잘못 되었습니까?

답변

0

나는 강하게 아직 연주하지 않았다고 고백하지만, 청취자 코드가 매퍼에없는 것이 맞다고 생각한다. 오히려 외부 클래스에서 단독으로 사용할 수 있으므로 구독하는 이벤트를 처리하는 단일 책임 객체 일 수 있으며 코드는 최대한 DRY 상태를 유지할 수 있습니다.

첫 단계로 청취자가 자신의 직업을 수행하는 데 필요한 것을 정의 할 수 있습니다. 인스턴스화에 대해 알고있는 일부 사항, 이벤트가 트리거 될 때 전달해야하는 항목이 있습니다.

예를 들어, 캐시 수신기의 경우 캐시, 수명 등의 정보를 부트 스트랩에서 인스턴스화 할 수 있습니다. 캐시 인스턴스를 완전히 구성하고 cachemanager 리소스에서 이동할 준비가되어있을 수도 있습니다. 이들은 리스너 객체의 생성자 매개 변수가 될 수 있습니다.

그럼에도 불구하고 여전히 부트 스트랩에서이 청취자를 이벤트 관리자에 등록하고 이벤트에 가입하고 이벤트가 트리거 될 때 실행할 메소드를 첨부 할 것입니다. 물론, 그 메소드 서명은 이벤트 매니저가 당신에게 줄 정보와 호환 될 필요가있다.

나는 생각이 리스너 객체의 잠재적 인 이득이 있다는 추측 : 단일 responsibilty, 너무 낮은 복잡성과 쉽게 테스트 할 인

  1. 잘하면 충분히 일반 인이되도록 단일 리스너는 여러 이벤트를 처리 할 수 ​​있습니다.

약간의 주름이 있습니다. 일부 다운 스트림 프로세스가 자신이 가입 한 이벤트를 트리거 할 가능성이있는 경우에만 청취자를 인스턴스화하고 등록하는 것이 부당한 성능으로 보일 수 있습니다. 그것은 정적 리스너가 들어오는 곳입니다. 다시 등록은 부트 스트랩과 같이 일찍 완료되지만 리스너는 실제로 필요할 때까지 인스턴스화되지 않습니다.

공개 : 나는 완전히 잘못했을 수 있습니다. 그래서 누군가가 나를 똑바로하고 싶다면 그것은 좋을 것입니다. ;-)

관련 문제