Как стать автором
Обновить

Комментарии 3

ещё бы в конце итоги голосования всем разослать и получить негодование %)

Выглядит как туториал простой апишечки на Go для новичков
Но реализация местами такая, как лучше не делать вообще

  1. GORM конечно ультра оверхед, он скорее усложняет код здесь, не только производительность уменьшает. А AutoMigrate его это вообще кошмарный кошмар как будто не production ready изначально

  2. Вместо Create с проверкой на ErrNotExists, можно FirstOrCreate with attrs gorm

  3. Лучше не инкрементировать счетчик в репозитории в ссылке на модель Vote

  4. Если 2 параллельных запроса придет c одним и тем же номером, то никакой защиты нет. Нужна блокировка на уровне строк и уникальный constraint если голос уже есть

  5. Обновление счетчика и создание голоса в бд лучше делать в одной транзакции априори, а то голос создадим, а инкрементировать не сможем - неконсистентность. И по сути это один метод репозитория - создания голоса, а не два разных.

  6. Зависимости с большой буквы не надо называть, если это не необходимо экспортировать реально

  7. Интерфейсы в месте реализации, а не использования, как то слишком не туда не сюда выглядят на примере, в чем гибкость и удобство в Вашем случае?

  8. Снова про интерфейсы. Если используется чистая архитектура и для DI куда удобнее класть интерфейсы в места использования, а у вас вообще как то непонятно вышло) Ваш код даже невозможно юнит тестами покрыть по сути, если даже опустить, что Handler зависит от репы бд напрямую...

  9. Никогда в жизни не стоит внешние вызовы через дефолтную конфигурацию http.Client делать без таймаутов и прочих ограничений по соединениям и т.п.

  10. Нету общепринятого gracefull shutdown, если сервис будет рестартиться во время каких то операций и открытых соединений то капут, потеря голосов, ошибки у клиентов, неконстистентность, вопросы, негодования, неудобства, смерть

  11. Если так важно отправлять смс, то стоит предпринимать делать несколько попыток. А если не получилось, то откатывать транзакцию к бд. Иначе полная ахинея выходит.

Все эти пункты учесть можно за 10 минут без усложнения кода и реализации ровно ни на сколько, но зато работало бы как надо и выглядело более менее

Привет! Спасибо за развёрнутый комментарий, действительно есть над чем подумать. Начну с того, что цель статьи — продемонстрировать простой рабочий прототип системы SMS-голосования, которая должна быть понятна и полезна даже для тех, кто не сталкивался с подобными решениями. Конечно, данный код — это не эталон production-ready системы, но он вполне выполняет свою задачу в рамках туториала.

Cпасибо за критику, некоторые ваши советы действительно дельные, и мы учтем их в следующих статьях.

Будем рады вашим комментариям в будущем!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий