С моей точки зрения, я думаю, что сохраненные проки - это путь. Во-первых, их проще обслуживать, так как быстрое переключение на один означает просто запустить сценарий, не перекомпилируя приложение. Во-вторых, они намного лучше для безопасности. Вы можете устанавливать разрешения на уровне sp, а не непосредственно на таблицах и представлениях. Это помогает предотвратить мошенничество, потому что пользователи не могут ничего сделать непосредственно в базе данных, которая не указана в хранимой процедуре. Они легче настраиваются. Когда вы используете хранимые procs, вы можете использовать метаданные зависимости базы данных, чтобы помочь определить влияние изменений базы данных на базу кода. Во многих системах не все операции доступа к данным или даже CRUD будут выполняться через приложение, поскольку код, как мне кажется, является контрпродуктивным. Если весь доступ к данным находится в одном месте (идея, которую я поддерживаю), она должна быть в базе данных, где она доступна для всех приложений или процессов, которые могут потребоваться для ее использования.
Я обнаружил, что прикладные программисты часто не рассматривают лучший способ для базы данных обрабатывать информацию, поскольку они ориентированы на приложение, а не на сервер. Поместив код базы данных в базу данных, где он находится, он, скорее всего, будет рассматриваться и проверяться специалистами базы данных, которые рассматривают базу данных и ее производительность.Мы поддерживаем сотни баз данных и приложений здесь. Я могу посмотреть в любой базе данных и найти код, который мне нужно найти, когда что-то медленное. Мне не нужно загружать код приложения для каждого из сотен различных приложений, чтобы увидеть часть, которая мне нужна для выполнения моей работы.
+1. Улучшения ORM сделали аргумент хранимой процедуры для производительности менее релевантным. Проблемы с производительностью в стороне, мне нравится код, который наилучшим образом позволяет вам обновлять и поддерживать продвижение вперед. – jro
Это отлично подходит для CRUD, но как насчет более привлекательных запросов, обращающихся к нескольким таблицам? Как получить доступ к таблицам, у которых нет первичных ключей (и вы застряли в нем, потому что они принадлежат стороннему поставщику)? –
Вы правы, Господь. ORM не может использоваться для каждого сценария. В описанных вами случаях хранимые процедуры могут быть лучшим маршрутом. Я знаю, что ведущие ORM предоставляют поддержку хранимых процедур, но не имеют большого опыта работы с ними через orm. –