SQLc
За время, пока я пилю свои индистартапчики, я взял на вооружение много очень полезных инструментов, которые вошли в мой стэк и существенно его усилили. Я думаю, что грех не поделиться своими открытиями. Сегодня речь пойдёт про sqlc, как вы могли догадаться.
Есть такой слой кода, который всегда был для меня очень нудным — это написание SQL-запросов средствами языка программирования. Для решения этой задачи существует несколько подходов. Самый модный и популярный, как мне кажется, — это ORM. Ты описываешь классы, которые олицетворяют твои модели в базе, прописываешь их отношения. После этого волшебная библиотека навешивает на них всякие методы, которые позволяют тебе всё это дело из базы доставать и в базу записывать. Вроде всё работает, но меня лично в этом всём всегда смущало отсутствие понимания того, что там происходит под капотом. Я тревожный человек, я хочу всё контролировать! Ещё если у тебя появляется потребность в нестандартном запросе, начинается гимнастика с элементами акробатики в попытках на базе этой ORM нужный запрос соорудить. Короче, мне это всё не очень зашло.
В какой-то момент я пришёл к тому, что просто писал весь код, который составляет и шлёт запросы, руками. Это очень много однообразного кода, где легко допустить ошибку, но сам подход меня полностью устраивал. Так я и жил, пока в один момент не нашёл то, о чём всегда мечтал.
SQLc — это кодогенератор для Go, который на вход принимает набор SQL-запросов и набор миграций, а на выходе даёт простые как пробка функции и модели, чтобы с лёгкостью щеголять ими в своей бизнес-логике. Модели он генерит из миграций, а функции — из запросов. У него херова туча настроек, так что его почти все смогут накрутить так, как им нравится. После того как он всё нагенерит, ты можешь пойти и посмотреть, что у него там получилось — это лично у меня улучшает качество сна.
В принципе, я вообще обожаю кодогенерацию. Она драматически снижает вероятность ошибок в коде и ускоряет разработку. А это всё — ценнейшие метрики для маленьких инди-проектов и MVP.
Рекомендую видео-обзор этого чудесного инструмента, если вам стало интересно.
P.S. Касательно других языков, я не знаю точных аналогов, но думаю, вы сможете найти что-то похожее. Самое главное — это сама концепция: фокусироваться только на SQL, а код для бизнес-логики нагенерится автоматически.
Post #102
121
- 👍 3
- ❤ 1