примера: у меня есть АПИ с одним эндпоинтом - вебхуком для телеграма, куда прилетают все Update
В контроллере, в зависимости от Update.Type я уже дальше отправляю Update.Message, Update.CallbackQuery и т.д. по разным сервисам, которые хендлят каждый из типов Update
Дальше в каждом из сервисов идёт обработка данных внутри Message/CallbackQuery и в зависимости от данных (например комманды в сообщении) - пересылка дальше другим сервисам на обработку
У разных сервисов есть разные зависимости: TelegramBotClient для общения с телегой, SpotifyClient для работы со спотифаем, DbContext для работы с БД и т.д.
Сейчас я это всё реализовал в классическом C# стиле - закинул всё в DI контейнер, все хендлеры объявил как классы и получаю в их конструкторы нужные объекты зависимостей
Это нормальный подход или есть способ сделать это лучше или более идиоматично?
Есть много разных способов: внедрять функции за зависимости, всякие пляски с каррированием, монадами и так далее. Мне лично ближе всего сишарпный стиль, но с большим использованием функций, т.е. статических методов
можешь делать то же самое только без DI контейнера)
Можно попробовать event-driven архитектуру Сделать евентбас и регать в него функции, которые получают события и ко-эффекты, а возвращает еффекты в виде типов
Обсуждают сегодня