Здравствуйте. Пишу сейчас более-менее крупное приложение для себя на 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. Буду рад любой критике касаемо кода и архитектуры приложения