Покопался в интернете на тему того, стоит ли применять хранимые процедуры , и в каких случаях.
находил аргументы как за, так и против.
Вот что я для себя выяснил:
- СУБД гораздо менее дружелюбны к масштабированию ( https://habr.com/ru/post/487622/, один из комментов)
- неудобство контроля версий. прям, печаль, люди опытом делятся, какое решение кто нашел. целая буча, в общем
- скудные возможности языка
- как следствие из предыдущего - тяжело/не возможно следовать принципам ООП - на мой взгляд, самый тяжкий из грехов
- проблемы с юнит-тестированием (вытекает из предыдущего) (хотя, другие говорят, что как-то можно)
- не скейлятся (ну или скейлятся как-то проблемно. типа, они ~"изначально должны быть заточены на шардинг", чтоб их можно было скейлить). это, кстати, чаще других упоминается.
- тяжелее прописывать сложную логику
- IDE для разработки ХП, возможно, будет лажовым (зависит от СУБД)
- язык хранимок распологает к копипасте
сам я не использую хранимки, поэтому делал упор на аргументы против :)
про аргументы "за" у меня сложилось впечатление, что большинство их них можно не принимать во внимание при наличии 3-звенной архитектуры / бизнес-слоя / сервиса бизнес-логики. Единственный убедительный для меня аргумент - оптимизация. для себя я сделал вывод, что, как и в случае с другой оптимизацией, хранимые процедуры нужно применять только в "бутылочных горлышках системы". и заплатить за это, как и в случае прочей оптимизации, придется простотой поддерживаемости кода. в общем, без необходимости лучше не использовать.
полезные ссылки:
- статья, где описываются отрицательные качества хранимок: http://www.tonymarston.net/php-mysql/stored-procedures-are-evil.html
- https://habr.com/ru/post/210920/#comment_7262078 - пара хороших комментов по теме
- https://www.c-sharpcorner.com/blogs/why-stored-procedures-are-outdated
Комментариев нет:
Отправить комментарий