Это немного открытый вопрос, но я хотел получить некоторые мнения, так как я вырос в мире, где встроенные SQL-скрипты были нормой, тогда мы все были хорошо осведомлены о проблемах, связанных с SQL-инъекциями, и о том, насколько хрупким был SQL, когда делать струнные манипуляции повсюду.
Затем наступил рассвет ORM, когда вы объясняли запрос ORM и позволяли ему генерировать собственный SQL, который во многих случаях был неоптимальным, но безопасным и простым. Еще одна хорошая вещь об ORM или уровнях абстракции базы данных заключалась в том, что SQL был сгенерирован с учетом его механизма базы данных, поэтому я мог использовать Hibernate / Nhibernate с MSSQL, MYSQL, и мой код никогда не менялся, это была просто деталь конфигурации.
Теперь перенесемся в текущий день, когда кажется, что Micro ORM выигрывает у большего числа разработчиков. Мне было интересно, почему мы, казалось бы, сделали разворот по всей теме sql.
Я должен признать, что мне нравится идея отсутствия конфигурационных файлов ORM и возможности писать мой запрос более оптимальным образом, но мне кажется, что я снова открываюсь к старым уязвимостям, таким как SQL-инъекция, и я также привязываю себя к один механизм баз данных, поэтому, если я хочу, чтобы мое программное обеспечение поддерживало несколько механизмов баз данных, мне нужно было бы сделать еще несколько хакеров строк, которые, похоже, начинают делать код нечитаемым и более хрупким. (Как раз перед тем, как кто-то упоминает об этом, я знаю, что вы можете использовать аргументы на основе параметров с большинством микроформ, что в большинстве случаев обеспечивает защиту от внедрения SQL)
Так что же думают люди по этому поводу? Я использую Dapper в качестве моего микро ORM в этом случае и NHibernate в качестве моего обычного ORM в этом сценарии, однако большинство в каждой области довольно похожи.
Что я называю встроенным SQLэто строки SQL в исходном коде. Раньше в исходном коде проходили дебаты по строкам SQL, что отвлекало от фундаментальной цели логики, поэтому статически типизированные запросы в стиле linq стали настолько популярными, что их все еще только один язык, но, скажем, с C # и Sql на одной странице, у вас есть 2 языка смешались в вашем исходном коде. Просто чтобы уточнить, SQL-инъекция - это только одна из известных проблем с использованием строк sql, я уже упоминал, что вы можете не допустить этого при запросах на основе параметров, однако я выделяю другие проблемы с внедрением SQL-запросов в ваш исходный код, таких как отсутствие абстракции DB Vendor, а также потеря любого уровня захвата ошибок времени компиляции при запросах на основе строк, - это все проблемы, которые нам удалось обойти с появлением ORM с их функциональностью запросов более высокого уровня,
Таким образом, я менее сконцентрирован на отдельных выделенных проблемах, и тем больше картина того, что теперь становится более приемлемым снова иметь строки SQL непосредственно в исходном коде, поскольку большинство микро-ORM используют этот механизм.
Вот аналогичный вопрос, который имеет несколько разных точек зрения, хотя больше о встроенном SQL без контекста микроорганизмов: