pf03 / newBot

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

Вопросы по коду #11

Closed KateBushueva closed 3 years ago

KateBushueva commented 3 years ago

пропиши, пожалуйста, ход работы программы в этой функции по шагам, что-то тут лишнее, на мой взгляд.. https://github.com/pf03/newBot/blob/7ba8545adbe74e4705cc72f91994aedeeb848d17/src/Logic/Bot.hs#L18

pf03 commented 3 years ago

В новой версии я этот процесс упростил, убрал лишнее. Убрал флаг updateIeFromFile из конфига Исправил работу с updateId для VK (персистентность)

KateBushueva commented 3 years ago

да, так хорошо

KateBushueva commented 3 years ago

https://github.com/pf03/newBot/blob/61509e8551ee3684c3a357f0b67970b6d180844f/src/Transformer/Functions.hs#L14 в данной функции много вложенных условных операторов. Вообще на кейсы/ифы стояло ограничение вложенности. По-хорошему, лучше избегать даже двойной, а тем более тройной вложенности. Это отвлекает от основного хода функции на детали. Детали лучше вынести в отдельные функции (здесь можно воспользоваться чем-то вроде either, maybe...). Можно саму функцию превратить в пайплайн: прочитать конфиг -> запустить действие. Тут у тебя и where внутри кейса.. лучше избегать такого

KateBushueva commented 3 years ago

https://github.com/pf03/newBot/blob/61509e8551ee3684c3a357f0b67970b6d180844f/src/Transformer/Functions.hs#L31 кто такой etuple?

KateBushueva commented 3 years ago

Такой еще момент, ты оборачиваешь, читай скрываешь, ход работы программы внутрь тайпклассов. Проблема в том, что логику работы кода сложно отследить, приходится прыгать от класса к классу, чтобы понять, какое действие в данный момент совершает твой код. Я пытаюсь донести, что на верхнем уровне абстракции должен логически прослеживаться основной ход работы программы. В твоем коде видно чтение конфига, видно запуск программы (правда запуск является обработчиком одного из условий конфига, хотя логически это равнозначные вещи, просто последовательные). Однако основные действия программы происходят уже внутри трансформеров и чтобы их найти нужно спуститься на несколько уровней внутрь, хотя логически это должна быть последовательная цепочка действий верхнего уровня

pf03 commented 3 years ago

В новой версии я оставил на вeрхнем уровне Transformer.run два действия - runConfig, showValue, а также механизм работы с потоками

Sergey111991KV commented 3 years ago

Мне нравятся трансформеры) молодец, что их использовал, только нужно как Катя сказала и вправду делать все функции в монаде самодокументирующимися, а названия типа state' и etuple ( как минимум eTuple) избегай - боже я понимаю почему меня за это ругают :) чтобы понять, что здесь значат они - нужно смотреть функции глубже