Lemmy Lemmy 27 листопада 2022, 04:03

Дали світло, протестував 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.

Коро­тше кажу­чи, сусі­ди нам не дають роз­сла­би­ти­ся, а ми не дає­мо роз­сла­би­ти­ся їм. Всім гар­но­го настрою!

  • 12
  • 9
  • 10

9 коментарів

  • Lemmy Lemmy 3 роки тому · Автор

    MySQL все-таки пло­хо, даже для удоб­ства разра­бо­тки. Как ты соби­ра­е­шься юнит/​интеграционные тесты писать с MySQL? У SQLite с этим гора­здо проще

    Тесты пока не пишу и пока сло­жно пред­ста­вить что для это­го нужно и навряд ли это сей­час при­ори­тет. Хотя, неко­то­рые под­хо­ды в разра­бо­тке начи­на­ю­тся с тестов. Могу ска­зать, что Prisma позво­ля­ет разво­ра­чи­вать стру­кту­ру как в MySQL так и в SQLite так и в Postgress. Ясно что такая мощная абстра­кция име­ет некий дже­не­ра­ли­зи­ро­ван­ный язык запросов.

    О фрейм­вор­ках тоже нужно забыть, в вебе они не нужны.
    Лучше писать код ров­но под то, что нужно сей­час или най­ти библи­о­те­ку под то, что нужно сей­час, но никак не фреймворк.
    Не под­да­вай­ся эффе­кту вто­рой системы.

    Тут могу толь­ко вспом­нить свой кур­сач на 3‑ем кур­се когда две неде­ли ове­рин­же­не­рил на Cи, пыта­ясь прев­ра­тить его в C++, а потом все выки­нул и напи­сал за дня 3 на Си, одер­ги­вая себя от напи­са­ния абстр­кций. Поста­ра­юсь одер­ги­вать себя.

    • 0
    • novoreg novoreg 3 роки тому

      Тесты пока не пишу и пока сло­жно пред­ста­вить что для это­го нужно и навряд ли это сей­час приоритет.

      Тесты — это такой нео­че­ви­дный хак по уско­ре­нию разра­бо­тки. Вро­де пише­шь боль­ше кода, а тра­ти­шь мень­ше вре­ме­ни на все ))

      • 0
  • novoreg novoreg 3 роки тому

    Пару оши­бок, кото­рые ты зара­нее допускаешь.

    Язык дол­жен быть ком­пи­ли­ру­е­мым. Не ради прои­зво­ди­тель­но­сти вычи­сле­ний, про­цес­со­ра на сер­ве­рах будет хва­тать и для интер­пре­ти­ру­е­мых языков, а ради натив­ных машин­ных типов дан­ных и натив­ных стру­ктур дан­ных. Память сер­ве­ров и ком­пью­те­ров все­гда будет огра­ни­че­на и явля­ться основ­ным зада­ю­щим цен­ни­ком. Пото­му память самое глав­ное, под что все все­гда нужно оптимизировать. 

    MySQL все-таки пло­хо, даже для удоб­ства разра­бо­тки. Как ты соби­ра­е­шься юнит/​интеграционные тесты писать с MySQL? У SQLite с этим гора­здо про­ще, пото­му что это библи­о­те­ка, все про­сто код, вклю­чая весь мене­джмент базы, пото­му кодом можно про­сто все посо­зда­вать под тесты, даже более того, под тесты можно поо­тклю­чать все fsync() опе­ра­ции, что­бы тесты очень быстро пролетали. 

    О фрейм­вор­ках тоже нужно забыть, в вебе они не нужны. Они все­гда будут все усло­жнять, огра­ни­чи­вать гиб­кость, пыта­ться загнать тебя в чьи-то рам­ки с часто непод­хо­дя­щи­ми пред­по­ло­же­ни­я­ми о том, что тебе может быть нужно, будут пожи­рать твое вре­мя, с ними дол­го вози­ться и с само­го нача­ла и с опытом, т.е. как там что-то сде­лать в задан­ных рам­ках, как их там покрывать теста­ми, как деба­гить, как дости­чь нужной прои­зво­ди­тель­но­сти, как решить неи­збе­жно возни­ка­ю­щие про­бле­мы с прои­зво­ди­тель­но­стью и т.д. Лучше писать код ров­но под то, что нужно сей­час или най­ти библи­о­те­ку под то, что нужно сей­час, но никак не фрейм­ворк. Это софт, потом, когда боль­ше буде­шь пони­мать о при­ло­же­нии и про­бле­мах — все перепишешь. 

    Не под­да­вай­ся эффе­кту вто­рой системы.
    https://​en​.wikipedia​.org/​w​i​k​i​/​S​e​c​o​n​d​-​s​y​s​t​e​m​_​e​ffect

    • 0
    • Lemmy Lemmy 3 роки тому · Автор

      При­віт! Дякую за лінк на пост. Нещо­дав­но пра­цю­вав у ковор­кін­гу, але теж поча­ли вими­ка­ти сві­тло. Ті що пра­цю­ють від гене­ра­то­ра тре­ба пере­ві­ри­ти. Кори­сна мапа!

      • 0