Логика на SQL

Недавно получил по e-mail вопрос, на который коротко ответил уже, но потом решил более развернуто написать уже здесь на блоге:

Привет, Михаил много ли логики пишешь на Transact-Sql? Как думаешь хорошая идея писать sql-процедуры на c#? В sql-е есть такая возможность.

В самом SQL не так уж и много возможностей, а вот в Transact-SQL действительно можно написать многое. Но я не пишу логику на Transact-SQL. Я могу написать какие-то простые вещи в самом крайнем случае, но только в крайнем. 

Я предпочитаю хранить котлеты и мух отдельно и база данных предназначена для хранения данных, а логика должна жить на серверах приложений. У этого есть много преимуществ, например: проще обновлять в высоконагруженных сайтах. В своей книге я писал о возможных проблемах обновления окружения, где есть процедуры. Если вы наложите на сайт обновления, а что-то пойдет не так, то откатывать будет сложнее. Сохранить обратную совместимость со старым кодом сложнее. Обновляете процедуру и сайт может упасть, пока не обновить код. 

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

Так что я предпочитаю писать код так, чтобы представления были максимально независимы от кода - HTML не должен использовать никаких фишек фреймворка, который вы используете на бакэнде. Почему все говорят на инъекции зависимостей в коде на C# или Java, но внедряют зависимости на фреймворк в HTML представления? 

Кода на C# должен быть максимально изолирован от представления и от базы данных. Здесь должна жить вся логика. 

Ну а база данных должна заботиться только о данных и никакой логики тут не должно быть. У логики не должно быть зависимости от базы данных. Если привязаться к Transact-SQL, то в случае необходимости переход на MySQL или Oracle будет стоить неоправданно дорого. 

И еще одна причина, почему я не пишу логики в SQL - потому что в коде ее проще тестировать. Когда-то я написал утилиту для тестирования запросов в базе данных: https://github.com/mflenov?tab=repositories, но я ее использовал только для тестирования View. Хранимые процедуры и функции я уже и не помню, когда писал последний раз. Логика должна быть в коде еще и потому, что тут ее тестировать на много проще и удобнее, а тесты должны быть всегда. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.

Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Youtube Instagram