SQL Driven. Учетная система с ориентацией на SQL

В статье описан подход, когда во главу угла ставится SQL, а также плюсы и минусы подобного подхода.

by

Что есть полный стек разработки?

Самописные системы разрабатываются на базе полного стека разработки с N слоями:

Это довольно трудоемко, сложно. Но этому есть причина. Коробочные решения не дают гибкости, а для дальнейшего развития системы очень важно иметь возможность легко развивать систему без серьезных ограничений.

Когда то давно мы создали модуль метрик, который генерировал некие отчеты в виде вложенных показателей. Каждый отчет — это данные в таблицах + некая хранимая процедура для извлечения данных.

Движок модуля подхватывал эти данные и хранимку и выводил все что нужно пользователю.

Это привело нас к идее, а почему бы и другие все модули не попробовать сделать по подобному принципу — формы, таблицы, графики, дашборды и прочее.

Что дает в итоге такой подход:

во-первых, можно менять бизнес-логику на лету (просто поменяв хранимую процедуру). В случае обычного N-слойного приложения необходима перекомпиляция и обновление программы.

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

в-третьих, основная сложность ложится на 1 слой и локация ошибки с высокой степенью вероятности находится только в 1 слое — SQL процедурах. Это упрощает поиск ошибок и минимизирует количество сбоев на front end.

Как это выглядит изнутри

Возьмем к примеру вывод таблицы.

На входе — это сниппет

Ваш JS движок обрабатывает подобные компоненты и запрашивает у базы описание по компонентам и данные для них (все через знанимые процедуры).

Полученные данные JS движок выводит в виде таблицы. Данные удовлетворяют неким правилам/стандартам. Например для таблиц у нас правила примерно выглядят так:

процедура GetItems выдает в SELECT 1 данные таблицы, в SELECT 2 — данные о пагинации, в SELECT 3 — настройки вывода таблицы.

К примеру если в select 3 передать select 1 compact — то таблица будет выведена в компактном режиме.

https://spark.ru/upload/other/b_5decbeebd0fde.jpg
Редактирование SQL для таблицы вывода страниц