Правильно ли я реализовал паттерн наблюдатель?

Здравствуйте. Пишу сейчас более-менее крупное приложение для себя на node.js + typescript, в котором есть взаимодействие с MySQL, Redis, Google Maps API и Telegram API. Решил использовать паттерны проектирования (раньше этого не делал и писал абы как), чтобы писать читаемый и расширяемый код. И столкнулся с проблемой реализации Observer. Код примерно следующий:

сonst TelegramBot = new TelegramBot(config.token, {polling: true}); //telegram-бот
const redisApi= new RedisApi(redisClient); //обёртка для удобной работы с сессиями через Redis
const Observer = new Observer();

//обычное сообщение, требующее от пользователя нужного формата входных данных
observer.on('classic', (msg: Message, text: TextMessage) => {
    bot.sendMessage(msg.from.id, text.text, text.keyboard);
});

observer.on('classic', (msg: Message, text: TextMessage, level: string) => {
    if (level != undefined) redisApi.setSession(msg.from.id, level);
});

//classic - тип события
//msg - сообщение от пользователя telegram
//text - ответное сообщение пользователю
//level - аналог сессий, приспособленный для телеграм-бота


Правильно ли я реализовал observer? Меня смущает, что так много параметров передаётся. Возможно, было бы правильнее передавать только тип события и входящее сообщение, а другие модули уже сами бы определяли, какое сообщение отправить в ответ и на какой "уровень" опроса перевести пользователя. Или, может, я вообще всё не так делаю? Помогите разобраться, пожалуйста

P. S. Полный код здесь - https://bitbucket.org/mak_tu/plantsbot/src
Его там не очень много. Если кому-то будет не лень посмотреть на него, то было бы здорово.

P. P. S. Буду рад любой критике касаемо кода и архитектуры приложения
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
Правильно ли я реализовал observer?

Сложно сказать т.к. репозиторий на который Вы ссылаетесь по всей видимости приватный. Но вроде как движетесь в правильном направлении

Меня смущает, что так много параметров передаётся

Сделайте отдельный класс событий, который будет содержать все необходимые данные и работайте непосредственно с ним, а не с кучей параметров

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

Тут все зависит исключетельно от Вашей системы и ее организации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы