AKitavtsev / telegram-vk-bot

BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

Irrefutable patterns #9

Closed olegromashin closed 3 years ago

olegromashin commented 3 years ago

Те же проблемы, что и здесь: https://github.com/AKitavtsev/telegram-vk-bot/issues/8

AKitavtsev commented 3 years ago

Имеется ввиду ~(VK x) и ~(Tl x) ?

olegromashin commented 3 years ago

Да)

AKitavtsev commented 3 years ago

Но, я считал, что здесь не может бать никаких проблем. Tl для модуля Telegram, VK - для VK. И невозможно применить в модуле VK (Tl Update), так, как модуль ничего не знает о типе Update. А Telegram o типе Event. И любой рефакторинг в этом направлении столкнется с ошибкой компиляции. Если не создаст или не импортирует соответствующие типы У каждой функции, принимающей UPD есть две реализации - для (Tl Update) и для (VK Event), но находятся они в разных модулях.
Конечно, может, я не прав. Поправь, пожалуйста Наверно, можно объявить тайпкласс UPD и реализовать эти функции в качестве инстанса для типов Update и Event, но будет ли лучше ? Других путей, пока не придумал. Может, подскажешь?

olegromashin commented 3 years ago

Но, я считал, что здесь не может бать никаких проблем. Tl для модуля Telegram, VK - для VK. И невозможно применить в модуле VK (Tl Update), так, как модуль ничего не знает о типе Update. А Telegram o типе Event. И любой рефакторинг в этом направлении столкнется с ошибкой компиляции. Если не создаст или не импортирует соответствующие типы

Смотри, теоретически, конечно, в твоём проекте ты можешь всё контролировать. Но уже в более менее средних проектах нельзя надеяться на то, что никто не импортирует необходимые типы. Ты собственноручно создаёшь кучу ненеобходимых потенциальных ситуаций для выбрасывания исключений. Можно сразу написать программу без таких недочётов и избавиться от проблем в будущем.

Других путей, пока не придумал. Может, подскажешь?

У меня пока только такая идея: разделить UPD на два типа, параметризовать DataLoop одним из типов, в свою очередь Handle тоже параметризуется одним из типов. Лучше попробуй сделать это в отдельной ветке и создать pull request, чтобы не затормаживать работу над другими ишью. Если пока не уверен как подступиться, то можно оставить на попозже.

AKitavtsev commented 3 years ago

Вот здесь, как раз, у меня есть мысли. Уже реализую

AKitavtsev commented 3 years ago

Сделано . Значительно лучше получилось Но не стал, не заказывали