Как организовать бизнес-логику в хранимых процедурах SQL Server. Реализация слоя BLL в SQL
В платформе Falcon Space бизнес-логика создается прямо в хранимых процедурах.
Любая таблица, форма или другой компонент - это набор структурированных хранимых процедур, которые должны соответствовать определенному протоколу.
К примеру, у компонента Таблицы есть хранимки GetItems (получить данные для вывода таблицы), UpdateItemField (изменение поля таблицы), RemoveItem (удаление строки), FastCreate (быстрое создание записи по 1 полю).
Процедура GetItems содержит строго определенные параметры (см. документацию по таблицам) и платформа ожидает от процедуры определенного вывода (до пяти SELECT с определенными параметрами), который она использует для настройки вывода таблицы.
В целом вся бизнес-логика может помещаться в таких процедурах. Например, таблица projects - выводит список проектов. И вся бизнес-логика извлечения проектов может быть реализована в данной процедуре.
Однако бывают такие ситуации, как проверка доступа, логирование операций, выполнение некой типовой операции из нескольких шагов (пополнение баланса).
В этом случае имеет смысл создавать дополнительных слой хранимых процедур и функций.
Эти процедуры будут использоваться везде в хранимых процедурах компонентов.
Именование подобных процедур в платформе Falcon Space производится следующим образом: [system]_[entity]_[operation]. Пример security_persons_canRead
Подобные хранимки не должны иметь внутри выходного select (иначе это собьет работу хранимых процедур компонентов, либо придется использовать insert into ... exec ...).
Любые повторяющиеся блоки по проверке доступов, логированию, вычислению значений, формированию разметки должны выполнять в рамках подобных процедур.
Примечание: Для сложной разметки имеет смысл использовать механизм HTML блоков.
Все вопросы, связанные с обработкой ошибок лежат на самой платформе. При этом имеет смысл в хранимых процедурах обрабатывать некорректные ситуации правильным выходным select
if(@isFail=1) begin
select 0 Result, 'Что-то пошло не так...' Msg
return
end
Что еще посмотреть по SQL Server
Как запустить SQL сценарий сразу на нескольких БД
Индексы SQL Server. Поиск дубликатов
Запрос для получения SQL всех индексов для таблиц базы данных SQL Server
Как перестроить все индексы на базе SQL Server
Как разрезать строку на части в SQL по некоторому символу
Конвертация из строки в таблицу в SQL Server
Выполнение прямого запроса к URL из SQL
SQL Server Как установить у таблицы описание (MS Description)
Как получить текущего юзера БД
Ищем партнеров-разработчиков на T-SQL и PL/pgSQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта