ZerGМонолит возникает у тебя на одной машине, где стоит весь софт, относящийся к боту. Разделён он на файлы или не разделён - неважно. Дело в том, что тебе при любых новых нововведениях придётся его менять. Это проблема BASIC'а. Там можно было записать всё в одной процедуре, использовать там GOTO везде, который на строки переходил по номеру, и всё выглядело прекрасно и красиво, пока не нужно было его поменять для чего-то. И вот когда надо было спустя какое-то время его поменять, то его меняли в итоге (а что делать? не писать же заново), и вот тогда и возникала борода на бороде. Ещё и системы контроля версий отсутствовали, в которых это всё как-то можно было фиксировать и как-то это облегчать всё.
я совершенно не понял откудова ты взял монолит и 10-1000 строк
Я же предлагаю что. Написать этого бота. Отделить его от опросников полностью. Бот не знает, куда он там и зачем обращается. У него есть просто набор команд. Крутится он постоянно и доступен всем и всегда. А дальше ты его подсоединяешь к этим опросникам. Вначале у тебя один опросник сети. Да, вначале он один, но потом-то их может появиться штук сто. И когда он один, это подбивает тебя на то, чтобы сделать бот там, где этот опросник и стоит, причём сделать ботоопросник. То есть бот сам по себе является и опросником одновременно. Вот какой ты умный, типа вот так ты умно сделал и короткий код получил при этом и так далее. Но это не так. Потому что код должен быть открыт для изменений, он должен быть легко меняемым. Это мы даже не про O из SOLID говорим, это мы говорим вообще про базовое свойство программ. Если код неменяемый, то ты его выбросишь потом, потому что он станет легаси-кодом, который невозможно менять.
Так как мы рассматриваем всю эту систему с ботом с этим как код, вся эта система должна быть меняемой в любой момент. Поэтому мы её разделяем на эти модули. Ты же когда машину чинишь там или мотоцикл там какой-нибудь, ты же карбюратор когда вытаскиваешь, он же к корпусу не приварен? А очень удобно было бы всё влитое сделать. Только вот когда он сломается или его надо будет переставить на другой мотоцикл или машину, то то, что он влитой, тебе, наоборот, встанет боком. Понимаешь, почему компьютеры, машины, мотоциклы, боты вот такие состоят из отдельных изолированных частей? Потому что это всё потом обратно можно разбирать и менять или дорабатывать.
Вот смотри, что я предлагаю
Как видишь, сетей здесь дохера, при этом опросники ничего не знают про бота. При этом это всё можно дальше продолжать вниз, заходить из сетей в сети и так далее, бот при этом не затрагивается вообще никак. Почему? Потому что он свою функцию выполняет только для пользователей Telegram'а. Вот он только для них нужен и всё. Естественно, ты этих ботов можешь понаделать дохрена и больше и каждый из них может лазить куда хочет, хоть в сети, хоть за кофе ходить.
Это разбиение системы на модули. Модуль - это отдельная изолированная часть системы, у которой есть внешний интерфейс и внутренняя реализация, инкапсулированная в нём, недоступная никому снаружи. Даже если модуль содержится где-то в чём-то, в другом модуле, например, то этот содержатель не может пролезть внутрь этого модуля, потому что доступ внутрь модуля открыт только через интерфейс этого модуля.
tags: module