특정 이벤트 처리 및 데이터 생성을 기반으로하는 시스템을 개발하려고합니다. 각 이벤트에는 여러 필드가 포함되며 각 리스너는 일부 필드를 처리합니다. 나는 이벤트 생성 클래스 내 마음Java 이벤트 처리 디자인
에서 다음 두 가지 방법, 내가 예를 들어, 각 이벤트의 특정 필드의 특정 값에 대해 듣고, 여러 이벤트 리스너를 등록합니다 있습니다
public class MicroListener implements Listener { public void processEvent(Event e){ if(e.getName().equals(registeredName)) { ... } }
처리가 개체 자체 내에서 수행되고 이벤트의 중앙 처리가 없으므로 각 개체가 정보를 처리 할 수 있으므로 유혹입니다. 단점은, 치명적일 수있는 사실은 각 이벤트 (몇 십만 개 중)가 모든 청취자에게 브로드 캐스팅되어야한다는 사실입니다. 단, 극소수의 부분 만 실제로 청취 할 수 있습니다. 아마
... 모든 이벤트에 듣고 행동하는 중앙 집중화 된 리스너를, 장기적으로 큰 성능 저하를 생성하고, 예를 들어, 해당 이벤트 프로세서에 처리를 위임합니다 :
public class CentralListener implements Listener { Map<String, Processor> processorsByName; public void processEvent(Event e){ processorsByName.get(e.getName()).process(e); } }
이 속도는 빠르지 만 이벤트의 다른 부분에 대해서는 별도의지도 또는 프로세서 모음이 필요합니다. 이벤트 ID 등을 검사하는 프로세서. 이것은 접근법 1의 경우는 아니며 단순히 다른 수신기 집합을 생성하여 이벤트 생성 클래스에 등록하기 만하면됩니다.
여러분은이 중 어떤 것에 대해 어떻게 생각합니까? 그들은 이해가됩니까, 아니면 전혀 달라 지겠습니까?