CMS на MS SQL. Как сделать веб-оболочку для базы данных SQL Server

В этой статье рассмотрим вопрос создания веб-оболочки для базы данных SQL Server на примере нашей платформы Falcon Space и посмотрим основные отличия от классической  разработки системы по полному стеку технологий. 

Особенности полного стека разработки системы

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

  • проектируется база данных
  • создается слой доступа к данным
  • создается слой бизнес-логики
  • разрабатывается API или слой контроллеров
  • делается верстка
  • к ней подключается динамика за счет front end программирования.

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

Fullstack разработка - это долго, дорого и много ошибок

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

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

Новый подход - полное управление через SQL 

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

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

  • Во-первых, можно менять бизнес-логику на лету (просто поменяв хранимую процедуру). В случае обычного N-слойного приложения необходима перекомпиляция и обновление программы.
  • Во-вторых, что следует из первого — это скорость внесения изменений. Очень важно иметь возможность быстро вносить изменения, а не ждать разработчиков по 2 недели, когда они внедрят изменения в систему.
  • В-третьих, основная сложность ложится на один слой и локация ошибки с высокой степенью вероятности находится только в одном слое — SQL процедурах. Это упрощает поиск ошибок и минимизирует количество сбоев на front end.

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

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

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

<div class="as-table" data-code="table1" data-itemid="1"></div>

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

Полученные данные JS движок выводит в виде таблицы.

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

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

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

Редактирование SQL для таблицы вывода страниц

Так выглядит таблица в компактном режиме

Если необходимо реализовать какие-то действия с данными таблицы, то это также вызов некой хранимой процедуры с заданными параметрами и заданным выводом.

Процедуры делятся на системные (обслуживают компоненты и внутренние потребности системы) и пользовательские (задают вывод данных).

Редактирование процедур происходит через интерфейс панели управления, т.е. нет необходимости искать каждый раз хранимую процедуру в SQL Server Management Studio.

Сниппеты в разметке+ управление бизнес-логикой через SQL + гибкие компоненты ядра

Плюсы и минусы подхода с полным управлением через SQL

Какие дополнительные плюсы дает подобный подход?

1. Быстродействие. Вы работаете с чистым SQL без лишних прослоек в виде ORM. Это дает хорошее быстродействие, и оно ограничивается, по сути, быстродействием вашего написанного SQL запроса.

2. Созданный функционал — это только SQL и данные в таблицах (что также можно представить в виде SQL скрипта). Вы можете легко переносить между разными системами SQL для отдельных компонентов. Это возможность быстро наращивать кодовую базу и адаптировать ее в других подобных приложениях.

3. Не нужна компиляция. Поменяли процедуру — получили сразу в системе другой результат. По сути разработка идет в realtime, параллельно с использованием.

4. Локализация ошибок — большинство ошибок лежат в вашем SQL, а не разбросаны по всему стеку. Есть проблема? Проверяем работы процедуры в SQL Management Studio и анализируем вход и выход.

5. Поняв общий подход, систему можно развивать, добавляя новые блоки и модули без необходимости менять исходный код программы.

6. Уменьшение требуемых компетенций для поддержки системы. В нашем случае мы сводим все к двум компетенциям — знание SQL для бизнес-логики и Bootstrap для стилизации и вывода данных.

7. Уменьшение количества велосипедов. Программисты не могут больше делать в системе три вида по-разному сделанных таблиц. Все унифицируется и разработка идет быстрее.

Конечно, не все так просто, и есть свои сложности. Например, некоторые функции не так просто реализовать в SQL (вычисление хеша для кириллицы) или передача вызова из хранимой процедуры в код веб-приложения. Где-то приходится идти на компромиссы (например, есть ограничения верстки отдельных элементов).

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

Более подробное описание основных возможностей Falcon Space вы можете найти здесь.

P.S. Мы реализовали несколько типовых решений на базе нашей платформы. Вы можете посмотреть их демо здесь - https://demo.web-automation.ru/

Автор статьи - Руслан Раянов

Cоздатель платформы Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Демо-стенд компонентов
На стенде можно посмотреть различные компоненты в действии: таблицы, формы, модальные окна, диаграммы, карта и т.д.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Обсудить проект
Задайте начальные вопросы по проекту, которые вас сейчас волнуют. Мы бесплатно проконсультируем вас и порекумендуем лучшее решение.

If you like our articles, then please subscribe to our channel in Telegram - Falcon Space.
In it we will publish updates on articles and other materials regarding our platform.