Недавно я попытался реализовать свой собственный простой агрегатор событий. Меня очень вдохновила статья о агрегаторе событий в MSDN. Есть одна вещь, которую я заметил в агрегаторе событий в MSDN: события на самом деле являются классами сами по себе. Это совсем не плохо. Однако мне просто неудобно всегда создавать новый пустой класс для каждого отдельного небольшого события.
Причина, по которой я нахожу это неудобным, заключается в необходимости создавать класс для каждого отдельного детализированного события. Событие щелчка мыши, например, будет иметь двойной щелчок, одиночный щелчок, левый щелчок, правый щелчок и т. д. И все они будут иметь собственный класс. Это становится грязным через некоторое время.
Итак, в моей собственной реализации я подумал, что смогу сделать это таким образом, чтобы ClickEvent
был классом, но все детализированные события, связанные с событием Click, были бы «типами» ClickEvent
. В данном случае "типы" enum
. Использование будет выглядеть примерно так:
//Publisher
eventAggregator.GetEvent<ClickEvent>.Publish(ClickEventType.Double_Click, eventArgs);
//Subscriber
eventAggregator.GetEvent<ClickEvent>.Subscribe(ClickEventType.Double_Click, handlerMethod);
Однако я не уверен, что эта реализация побеждает всю цель строго типизированного события? Теперь кажется, что ClickEvent
— это просто контейнер для различных типов перечислений событий.