Недавно получил по 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. Хранимые процедуры и функции я уже и не помню, когда писал последний раз. Логика должна быть в коде еще и потому, что тут ее тестировать на много проще и удобнее, а тесты должны быть всегда.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.
Добавить Комментарий