Lemmy
Дали світло, протестував Prisma (27 листопада)
Привіт! Сьогодні нарешті дали більш-меньш стабільне світло. Тож вдалося засісти на декілька годин розгрібати бекенд.
Нарешті можу сказати що я закінчив тестити KeystoneJS та можу зробити висновок що цей інструмент, навіть в 6‑тій версії має сирий вигляд і ось чому: кодова база настільки часто міняється, що 6‑та версія зараз ризикує перетворитися на 7‑му. Внутрішні API часто змінюються, тож компонент авторизації через соціальні мережі для 6.0.0‑ої версії вже не працює на 6.1.X. Виглядає це вкрай дивно. Спробував інтегрувати PassportJS і зрозумів що не дуже сильно хочу писати нові компоненти под KeystoneJS, тому що мої компоненти ризикують відвалитися у новій версії (я навіть знаю місця де вони зломаються). То я закрив книжку під назвою KeystoneJS.
Але немає худа без добра — завдяки Keystone я дещо знайшов. Сам KeystoneJS побудований на Prisma. Я вже давно бачив цей ORM, але в останній час я став частіше бачити різноманітні системи в яких ця ОРМ займає ключову позицію.
Я почав тестити PrismaJS і зрозумів, що воно, з моєї точки зору, дуже сильно підходить в якості основи для роботи з БД. Так як я фронтендєр і розробляю сайт один то мені важливо щоб інструмент вже мав у собі наработані практики з бекенду. Так вийде система з середньою швидкістю роботи, але надійніша ніж якщоб всі прямітивні речі я робив власноруч (наприклад сам би писав щось накшталт ОРМ).
PrismaJS має наступні речі які спрощують розробку:
- Автоматична генерація структури бази даних по схемі, описаній в форматі GraphQL Schema. Я описую структури таблиць та відношення, PrismaJS генерує SQL-міграції для оновленя структури БД;
- Автоматична генерація TypeScript типів, тобто якщо щось змінюється в структурі БД то одразу видно які місця треба виправити в фронтенді. Це сильно підвищує стабільність;
- Зручний інтерфейс для роботи з даними Prisma Studio.
Поточний стек:
- Docker — автоматизація розгортання інфраструктури;
- MySQL — база даних (додатково: Adminer — менеджер БД);
- PrismaJS — ORM для того щоб спростити роботу з базою даних;
- AstroJS (в режимі SSR) — фронтенд фреймворк у режимі сервера, відповідпальний за роутинг та рендеринг сторінок на сервері;
- TurboJS — надстройка над SSR (Server Side Render) сайтом для перетворення його в SPA (Single Page Application);
- StimulusJS — компаньйон до TurboJS, додає JS-контролери;
- TilewindCSS — CSS фреймворк.
Планую протестувати наступну річ:
- PassportJS для ExpressJS — компонент для авторизації, в тому числі і через соціальні мережі.
Як і планував, продовжую займатися Стрічкою постів. Перевів весь сайт на PrismaJS. Пофіксив усі типи даних які залишилися від Pocketbase.
Тим, хто може пропустив, то зараз я працюю над оновленим сайтом, дизайн зараз виглядає так:
Буду робити стрім, маю надію що на деякий час світло стабілізувалося.
Доречі я зараз ще зайнятий тим що збираю свій анти-апокаліптичний сетап (або EcoFlow для бідних): це автомобільний акумулятор, зарядка до нього, понижувач до 5 вольт, і розводка лампочок по всіх кімнатах. Може ще куплю інвертор 12 В у 220 В. І все це до 10к гривень проти 32к за саму дешеву станцію EcoFlow.
Коротше кажучи, сусіди нам не дають розслабитися, а ми не даємо розслабитися їм. Всім гарного настрою!
Тесты пока не пишу и пока сложно представить что для этого нужно и навряд ли это сейчас приоритет. Хотя, некоторые подходы в разработке начинаются с тестов. Могу сказать, что Prisma позволяет разворачивать структуру как в MySQL так и в SQLite так и в Postgress. Ясно что такая мощная абстракция имеет некий дженерализированный язык запросов.
Тут могу только вспомнить свой курсач на 3‑ем курсе когда две недели оверинженерил на Cи, пытаясь превратить его в C++, а потом все выкинул и написал за дня 3 на Си, одергивая себя от написания абстркций. Постараюсь одергивать себя.
Тесты — это такой неочевидный хак по ускорению разработки. Вроде пишешь больше кода, а тратишь меньше времени на все ))
Пару ошибок, которые ты заранее допускаешь.
Язык должен быть компилируемым. Не ради производительности вычислений, процессора на серверах будет хватать и для интерпретируемых языков, а ради нативных машинных типов данных и нативных структур данных. Память серверов и компьютеров всегда будет ограничена и являться основным задающим ценником. Потому память самое главное, под что все всегда нужно оптимизировать.
MySQL все-таки плохо, даже для удобства разработки. Как ты собираешься юнит/интеграционные тесты писать с MySQL? У SQLite с этим гораздо проще, потому что это библиотека, все просто код, включая весь менеджмент базы, потому кодом можно просто все посоздавать под тесты, даже более того, под тесты можно поотключать все fsync() операции, чтобы тесты очень быстро пролетали.
О фреймворках тоже нужно забыть, в вебе они не нужны. Они всегда будут все усложнять, ограничивать гибкость, пытаться загнать тебя в чьи-то рамки с часто неподходящими предположениями о том, что тебе может быть нужно, будут пожирать твое время, с ними долго возиться и с самого начала и с опытом, т.е. как там что-то сделать в заданных рамках, как их там покрывать тестами, как дебагить, как достичь нужной производительности, как решить неизбежно возникающие проблемы с производительностью и т.д. Лучше писать код ровно под то, что нужно сейчас или найти библиотеку под то, что нужно сейчас, но никак не фреймворк. Это софт, потом, когда больше будешь понимать о приложении и проблемах — все перепишешь.
Не поддавайся эффекту второй системы.
https://en.wikipedia.org/wiki/Second-system_effect
Дизайн класний. І успіхів з сетапом
Дякую!
Привіт! Дякую за лінк на пост. Нещодавно працював у коворкінгу, але теж почали вимикати світло. Ті що працюють від генератора треба перевірити. Корисна мапа!