Skip to content

Ревью #2

Description

@Gmihtt
  1. Комментарии.
    Есть хорошее правило понятного кода: понтяному коду не нужны комментарии, в нем и так понятно что просходит :)
    Я разберу на примере:
    https://github.com/wixe/vktgbot.hs/blob/master/src/Telegram/User.hs#L12 - в этом случае наличие комментария точно избыточно, по названию понятно о чем идет речь. Если ты хочешь дать понять, что речь может идти о работе с ботом и юзером, ты мог бы назвать сам тип не Json, а, к примеру, UserBotInfo, эта идея относится ко всем типам с именем Json.
    А вот здесь https://github.com/wixe/vktgbot.hs/blob/master/src/Bot.hs#L55 напротив стоило бы пояснить зачем ты переходишь от ленивых вычислений к активным, и тут бы действительно не помешал комментарий.
    Ещё добавлю, что комментарии лучше писать либо сверху над чем-то, либо, в случае с полем, на определенном удаление:
data Type = Type {
 field1 :: Type1                          -- Comment
 field2 :: Type2                          -- Comment
 }

Тогда это становится проще читать.

  1. Модульность и стуктура проекта.
    Есть несколько файлов, к примеру, вот этот https://github.com/wixe/vktgbot.hs/blob/master/src/Bot.hs сейчас его сложно читать, там идут в перемешку instance, функции и типы. Не бойся делать много папок и файлом, напротив, это хорошо и улучшает читабельность
    В идеале каждый тип или группа связанных типов должны быть в своей папке и в своем файле.
    Все функции которые работают с этим типом должны тоже должны лежать вместе, но не обязательно в том же файле, что и тип, тут уже смотри по ситуации.
    Названия модулей и папок должны давать понять о чем идет речь и что лежит внутри модуля/папки

  2. Функции и типы
    Если идет несколько вложенных case of или довольно большое тело функции, по возможности старайся разбивать это на смысловые части, выносить что-то в блок where, использовать let, выносить функцию наружу.
    К примеру, такая лямбда выглядит очень сложной: https://github.com/wixe/vktgbot.hs/blob/master/src/Bot.hs#L194
    Не забывай везде писать сигнатуры: https://github.com/wixe/vktgbot.hs/blob/master/src/Options.hs#L45

  3. Тесты и ошибки.
    Здесь все те же рекомендации, что и выше, но добавлю, что тестов явно должно быть больше, чтобы они по максимум покрывали всю логику.
    Очень советую использовать Handle Pattern:
    https://jaspervdj.be/posts/2018-03-08-handle-pattern.html
    https://www.schoolofhaskell.com/user/meiersi/the-service-pattern
    Он поможет тебе организовать логику и организовать тесты.
    Я не особо увидел, чтобы ты где-то ловил ошибки и где-то их бросал, вот что советую почитать https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Exception.html
    Постарайся ловить ошибки везде где это возможно, а после, написать тесты для каждой такой ошибки, где рассматривается случай что ошибка происходит и случай что все работает корректно

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions