Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 March 26

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Anton Revyako
Привет. Я по приглашению @lp0404 :)

У меня история немного про другое. Это не генератор crud по схемам. Таких инструментов уже достаточно, не было смысла делать еще один.

Немного другой подход. Он для тех, кто пишет сложные запросы и не пользуется ORM. Стояла задача сгенерировать типы результатов (а в идеале и параметров) для произвольного запроса. Схема в данном случае нужна, чтобы ее скомпилировать в промежуточный объект и понять какие типы у используемых полей.
Существует проект, который компилирует запросы в prepared statements и извлекает типы результата прям из базы. Надежно, но не очень универсально.

Кроме типов мне не хватало еще двух вещей - nullability, и класса количества строк (none, one, one or none, many, many or none), для проверки в рантайме.


А когда я научился делать компиляцию в промежуточные объекты, появилась возможность сделать статический анализатор - holistic.dev
Привет. Источником модели тут является база? SQL скрипт базы или залитая в БД, так?
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
Источником модели является SQL запрос. SELECT/INSERT/UPDATE
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
текст запроса, точнее
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Подожди, в нем же нет модели
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
а это смотря что за модель считать )
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Модель можно экстрактить из DDL
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
А из SELECT * FROM USERS что можно получить?
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
Ты сейчас говоришь про схему. Возможно, это тонкости основных определений, но сама схема не обязана быть моделью.
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
А из SELECT * FROM USERS что можно получить?
если есть DDL + SELECT * FROM USERS, то можно получить все имена колонок с типами, и nullability
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Anton Revyako
если есть DDL + SELECT * FROM USERS, то можно получить все имена колонок с типами, и nullability
ну вот это и есть подход из 90х )))
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
ты экстрактишь схему из DDL (не важно, из самой базы или из скрипта)
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Подход интересный, но все против DDD
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
По DDD - база данных и запросы не должны быть в центре системы, база данных - это деталь реализации и должна быть на задворках системы
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
Я же решал конкретную задачу - упростить жизнь тем, кто пишет запросы. Стать новой религией задачи не ставилось )
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Anton Revyako
Я же решал конкретную задачу - упростить жизнь тем, кто пишет запросы. Стать новой религией задачи не ставилось )
Ты им упрощаешь жизнь сейчас, но источником истины становится то, что не может им быть. По хорошему все должно быть с точностью до наоборот.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Это все уже проходили в Дэлфи и Джаве сто лет назад, построение оконного интерфейса по запросам и базе, точно так же и апи и что угодно по базе строить. База в центре
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
а что должно быть в центре и где про это почитать / посмотреть видео ?
источник

AR

Anton Revyako in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
По DDD - база данных и запросы не должны быть в центре системы, база данных - это деталь реализации и должна быть на задворках системы
Все так. Но на данный момент между деталью реализации и всей системой есть дыра, которою никак нельзя провалидировать.

У тебя есть приложение с типами. И SQL. А соответствие одного и другого есть только в твоей голове. Мало того, что оно негарантированное, так еще при любом изменение в базе все разъедется еще больше.

Если относится к этому как к валидатору типов, то совершенно без разницы кто является источником правды.

Т.е. если у тебя orm - то вопросов с источником правды нет. А если ты пишешь запросы руками, то у тебя 2 источника правды, которые можно попробовать свести только методом пристального взгляда. Но и это не точно )
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Anton Revyako
Все так. Но на данный момент между деталью реализации и всей системой есть дыра, которою никак нельзя провалидировать.

У тебя есть приложение с типами. И SQL. А соответствие одного и другого есть только в твоей голове. Мало того, что оно негарантированное, так еще при любом изменение в базе все разъедется еще больше.

Если относится к этому как к валидатору типов, то совершенно без разницы кто является источником правды.

Т.е. если у тебя orm - то вопросов с источником правды нет. А если ты пишешь запросы руками, то у тебя 2 источника правды, которые можно попробовать свести только методом пристального взгляда. Но и это не точно )
У меня не так, у меня  есть схема предметной области и она является одним источником правды про типы и для приложения и для базы и для фронта и для апи, для всего
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
а, типа DDD рулит ?
источник