Почему в системах событий по паттерну «Издатель-подписчик» используются строки для идентификации событий? Почти во всех реализациях системы событий по паттерну "Издатель-подписчик" на Javascript (и не только) идентификация события происходит через уникальную строку:// публикация события
dispatcher.publish('user.profile.updated', {data: profileData});
// подписка на событие
dispatcher.subscribe('user.profile.updated', function(data) { console.log(data) });
При таком подходе событие состоит из двух частей: уникального имени и данных передающихся с событием в обрабатывающий его код.
Вопрос: почему для идентификации события, которое по сути является сообщением о том, что в системе что-то произошло, используются два независимых друг от друга типа данных? Ведь событие может быть экземпляром класса, опционально предоставляющим данные. Пример:class UserProfileUpdateEvent extends Event {...}
// публикация
dispatcher.publish(new UserProfileUpdateEvent(profileData));
// подписка
dispatcher.subscribe(UserProfileUpdateEvent, function(event) { console.log(event.data); });
При таком подходе у события появляется сигнатура и чёткая связь с передаваемыми данными. Такие события можно наследовать друг от друга и фильтровать по instanceof. К тому же вводится единственно возможный способ публикации - если событию необходимы данные и они не передались, будет брошено исключение.
Вопрос скорее теоретический, но пока я вижу в таком подходе только плюсы. Необходимость следить за уникальной строкой имени события мне кажется жутко неудобной.

21 Авг 2019 в 07:07
214 +1
1
Ответы
1

Использование строк для идентификации событий в системах по паттерну "Издатель-подписчик" может быть обусловлено несколькими причинами:

Простота и гибкость: использование строк позволяет легко и просто идентифицировать события без необходимости создания классов или структур данных для каждого типа события. Это делает систему более гибкой и удобной для использования.

Расширяемость: использование строк позволяет легко добавлять новые виды событий без необходимости изменения уже существующего кода. Новое событие можно просто опубликовать с новой строкой и обработать в соответствии с этим.

Простота взаимодействия между разными компонентами: использование строк позволяет разным компонентам системы взаимодействовать друг с другом, даже если они не знают о существовании друг друга. Просто публикуя или подписываясь на определенное событие по его имени.

Хотя использование классов для создания типов событий и передачи данных имеет свои преимущества, такие как четкая структура данных и возможность использования наследования, в конечном итоге выбор между использованием строк и классов зависит от конкретных потребностей и требований конкретного проекта.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир