Code Monkey home page Code Monkey logo

echo-bot's People

Contributors

stanislav-az avatar

echo-bot's Issues

Выделить только специфичные для ботов части, все общее стараться писать полиморфным

По бизнес логике у тебя есть куча мест, которые можно сделать обобщенными в полиморфных функциях: отправка в ответ сообщения входящего, обработка команды про количество повторов и тд. А в методы специфичные для каждого вида бота стараться минимум кода выносить, чтобы легко было новые типы ботов добавлять, и текущие менять. В идеале бизнес логику вообще можно было бы поменять в одном месте, и это бы распространилось сразу на всех ботов :)

BotConst

https://github.com/stanislav-az/echo-bot/blob/master/src/Bot/BotClass.hs#L69

На мой субъективный вхгляд неудобное имя: я его видел в коде но не понимал что оно значит: давай назовем как нибудь типа - BotStaticOptions, просто Const совсем не раскрывает семантики, когда я вижу эт ов коде в других местах )

Для EchoBot, мне кажется, лучше объединить тип и для msg, и для react.

У тебя же только в слаке есть эта особенность. Там проще сделать тогда только для слака ADT по типу

data SlackMessage = PlainMessage T.Text | Reaction T.Text

Надо из типа EchoBot все по максимуму выпилиывать, а то сейчас он оооочень монструозный получился :) И оставлять все по-максимуму обобщенное, чтобы в дальнейшем новый вид мессенджера было легко подключить

Переименовать caseMsg

Лучше такие служебные имена не давать :)
Тут у тебя есть общий метод по процессингу сообщения и несколько частных, это лучше и отразить в названиях. caseMsg станет processMsg, а processMsg станет processPlainMessage, например

Отрефакторить все, что связано с итератором

Тяжело разобраться с тем, что такое параметр iter у EchoBot, что такое iteratorTransformation и как им пользоваться, типы и примеры испольщования не особо помогли, даже когда в реализацию sIteratorTransformation для слака залез, не очень помогло :)

Можешь тут вкратце объяснить скрытый смысл за этой темой, я думаю, что мы можем вместе гораздо более понятную и очевидную абстракцию придумать :)

Абстрагироваться от стейта

https://github.com/stanislav-az/echo-bot/blob/master/src/Bot/BotClass.hs#L69

Абстрагируйся от того факта, что используешь стейт для этого функционала, спроектируй апиху для сторейджа данных, которые надо хранить, как-будто это абстрактный сторедж типа MonadBotStorage, и соответственно подрефактори функции там :) В идеале чтоб вдруг при желании при написании нового кода для других стореджей можно было и файл использовать, и базу и так далее)

А зачем столько методов в тайпклассах Has... ? :)

Сейчас тайпклассы HasTelegramEnv и HasSlackEnv имеют по куче методов каждый, хотя можно было просто по одному методу сделать getTelegramEnv и getSlackEnv соотвественно и все :) А остальыне функции можно выводить, например. Как в примере статьи про ReaderT тайклассы HasLog и HasBalance имеют самые примитивные методы :)

переписать makeConHistory для слака

Там можно отдельно с помощью функции maybe сконструировать аргумент для simpleQueryToQuery, а остальное будет общим кодом для всех случаев.

let arg = maybe ("limit", "1") (("oldest", ) . B8.pack) timestamp
HTTP.setRequestQueryString
        (Q.simpleQueryToQuery $ arg : address)
        req

почти весь код повторяется сейчас, это прямо по-любому надо выносить.

В идеале так весь проект проверить, чтобы подобного было как можно меньше :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.