Closed roman-bodavskiy closed 2 years ago
Убрала дублирования
Вот яркий пример, функция
makeRequest
явно имеет одинаковую структуру для обоих ботов. Значит ее нужно вынести в общий код, а какие-то специфические куски оставить в соответствующих модулях https://github.com/LyuPo7/bot/blob/master/src/Bot/Api/Tele/Request/Requests.hs#L157 https://github.com/LyuPo7/bot/blob/master/src/Bot/Api/Vk/Request/Requests.hs#L222Функции
setHelpMessage
иsetStartMessage
вBot.Api.Tele.Request.Requests
выглядят как абсолютно одинаковые. ФункцииwithHandleIO
дляBot.Api.Vk.Parser.Parser
Bot.Api.Tele.Parser.Parser
тоже одинаковые.Во многих случаях можно вынести общую логику отдельно и избавиться от дублирования кода
еще довольно много мест, где можно убрать дублирование кода, вот например
[b1, b2, b3, b4, b5] = buttons
b1Tele = TeleButton.createButton
(BotButton.text b1) (BotButton.description b1)
b2Tele = TeleButton.createButton
(BotButton.text b2) (BotButton.description b2)
b3Tele = TeleButton.createButton
(BotButton.text b3) (BotButton.description b3)
b4Tele = TeleButton.createButton
(BotButton.text b4) (BotButton.description b4)
b5Tele = TeleButton.createButton
(BotButton.text b5) (BotButton.description b5)
keyboard = TeleKeyboard.createKeyboard
[[b1Tele, b2Tele, b3Tele, b4Tele, b5Tele]]
явно можно переписать через fmap c какой-то вспомогательной функцией типа
createTeleButton button = TeleButton.createButton
(BotButton.text button) (BotButton.description button)
но при этом, конечно не забывать проверку на корректность (что кнопок должно быть ровно пять)
Нужно внимательно просмотреть на предмет одинаковых кусков кода. Некоторые вещи в реализациях для Telegram и VK очень похожи, и общую логику можно вынести отдельно
Поменяла еще в паре мест. Теперь вроде бы только методы специфические для каждого из Api реализованы в Vk и Telegram
Нужно внимательно просмотреть на предмет одинаковых кусков кода. Некоторые вещи в реализациях для Telegram и VK очень похожи, и общую логику можно вынести отдельно
ну вот например практически одно и то же
В этих двух модулях (Bot.Api.Tele.Mode.Mode
и Bot.Api.Vk.Mode.Mode
) довольно много одинакового кода, и есть набор функций, начиная с extractMessage
и до changeUpdateId
, которые обрабатывают один из видов апдейта и бросают ошибку на другом апдейте. По сути все эти пары функций можно объединить, обрабатывая сразу два варианта апдейта и обработки ошибок тогда там не потребуется.
При этом если возникает дублирование внутри функции, имеет смысл вынести общий код, например, в часть where
Объединила функционал этих двух модулей в Bot.Mode.Api
В этих двух модулях (
Bot.Api.Tele.Mode.Mode
иBot.Api.Vk.Mode.Mode
) довольно много одинакового кода, и есть набор функций, начиная сextractMessage
и доchangeUpdateId
, которые обрабатывают один из видов апдейта и бросают ошибку на другом апдейте. По сути все эти пары функций можно объединить, обрабатывая сразу два варианта апдейта и обработки ошибок тогда там не потребуется.
Вот яркий пример, функция
makeRequest
явно имеет одинаковую структуру для обоих ботов. Значит ее нужно вынести в общий код, а какие-то специфические куски оставить в соответствующих модулях https://github.com/LyuPo7/bot/blob/master/src/Bot/Api/Tele/Request/Requests.hs#L157 https://github.com/LyuPo7/bot/blob/master/src/Bot/Api/Vk/Request/Requests.hs#L222Функции
setHelpMessage
иsetStartMessage
вBot.Api.Tele.Request.Requests
выглядят как абсолютно одинаковые. ФункцииwithHandleIO
дляBot.Api.Vk.Parser.Parser
Bot.Api.Tele.Parser.Parser
тоже одинаковые.Во многих случаях можно вынести общую логику отдельно и избавиться от дублирования кода