Почему в системах событий по паттерну «Издатель-подписчик» используются строки для идентификации событий? Почти во всех реализациях системы событий по паттерну "Издатель-подписчик" на 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
180 +1
1
Ответы
1

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

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

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

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

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

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир