7

내 응용 프로그램에 Observer Pattern을 구현하려고합니다. (PHP가 아니기 때문에 Symfony의 구성 요소를 사용하지 않는 것이 좋습니다).Symfony EventDispatcher가 클래스 기반 전파 대신 이벤트에 임의의 이름을 사용하는 이유는 무엇입니까?

구성 요소가 상속을 사용하여 이벤트의 전체 트리에서 수신 대기하도록 이벤트를 전파하거나 수신 대기하는 클래스를 사용하지 않는다는 사실을 발견했습니다.

이름 기반 청취자를 사용하면 얻을 수있는 장점이 하나도 없습니다. 숙고 해 주시겠습니까?

답변

8

제 생각에는 Symfony2가 커플 링보다 응집성을 선호하기 때문에이 패턴 (Mediator pattern)을 사용합니다.

Symfony docs에서 :

반대 지향 코드는 코드를 확장 성을 보장하는 먼 길을왔다. 책임을 잘 정의한 클래스를 생성하면 코드가보다 유연 해지고 개발자는 하위 클래스로 코드를 확장하여 해당 동작을 수정할 수 있습니다. 그러나 그가 자신의 하위 클래스를 만든 다른 개발자와 자신의 변경 사항을 공유하기를 원하면 코드 상속은 더 이상 대답이 아닙니다.

프로젝트에 대한 플러그인 시스템을 제공하려는 실제 예제 인 을 고려해보십시오. 플러그 인은 메소드를 추가하거나 다른 플러그인과 간섭하지 않고 메소드가 실행되기 전이나 후에 을 수행 할 수 있어야합니다. 이것은 하나의 상속으로 해결하기 쉬운 문제가 아니며, 과 다중 상속 (PHP로 가능함)은 고유 한 단점을 가지고 있습니다.

Symfony2 이벤트 디스패처 구성 요소는 메 디 에이터 패턴을 구현하여 프로젝트를 실제로 확장 가능하게 만들고 간단하게 효과적으로 구현합니다.