2014-01-17 2 views
0

일부 기능을 특정 이벤트에 바인딩하고 다른 기능이 특정 이벤트를 호출 할 수 있도록 기본 동작 엔진이 필요한 프로젝트 작업 중입니다. Wordpress Hooks 시스템처럼 (필터가없는 경우 제외).조치 엔진을위한 구조

저는 Wordpress를 복사 할 수 있다는 것을 알고 있지만 생각에 대한 설명을 원합니다. 이 프로젝트는 상당히 커질 것이며 현재 1200 개 이상의 이벤트와 2,000 개 이상의 콜백이 해당 이벤트에 묶여있을 것이며 그 수치는 증가 할 것입니다.

A)

이 모든의 저장소 역할을 할 자신의 기능/세트 정적 기능을 하나의 클래스 유무 : 그래서, 그것은 (성능면에서)에 최선을 다 할 것입니다 바인딩 및이 기능

B) 응용 프로그램 기능을 바인딩하거나, 전화 할 때

이 기능을 포함하는 클래스를 구축, 이에 대한 유일한 인터페이스입니다 이벤트를 사용하려면 인스턴스가 사용되는 특정 이벤트가 포함 된 인스턴스화 된 Event 객체에 액세스해야합니다 (아직 글로벌 레지스트리에 포함되어 있으며 아직 결정되지 않았습니다).

그래서, 내 질문은, B, (작은 그룹으로 이벤트를 나누어)보다 성능이 좋은 것 또는 A이 경우에는 충분한 것입니까?

답변

1

글쎄,이 두 가지 전략에서 고려할 사항이 하나 이상 있습니다.

A) B에서 배열 구조를 사용하여 이벤트를 찾을 때 B보다 성능이 좋지만 유지 관리 및 확장이 더 복잡 할 것입니다. 이후 everithing을 작성해야하므로 클래스가 거대한 것일 수도 있습니다.

B)는 성능이 떨어지나 사용하기 쉽고 이벤트 엔진으로 확장 될 수 있습니다.

나는 B를 일종의 이벤트 배신자 패턴으로 사용하는 것이 최선의 선택이라고 생각합니다. 이 요점을 봐 https://gist.github.com/nunomazer/8472389, 코드는이 문서 http://www.cainsvault.com/design-pattern-php-event-dispatcher/입니다. Observer Pattern을 기반으로 한 간단한 이벤트 관리자를 구현합니다.

그러나 이벤트 관리자를 사용하는 경우 Symfony Event Dispatcher 구성 요소와 같이 프레임 워크에서 준비한 것으로 간주하여 프로젝트의 라이브러리로 사용할 수 있습니다.

+0

글쎄, A와 B는 바인딩 구조를 모든 콜백 (및 우선 순위) 목록이있는 중첩 배열 인'$ _bindings [$ eventName]'형식으로 배열 구조에 저장합니다. 처음에는 각 Event를 자체 클래스로 선언 할 생각은 없었지만 실행시에는 필요한 관련 핸들러 클래스 만 사용하는 것이 좋습니다. 하지만 훌륭해 보이네. 고마워. – topherg

관련 문제