Це дещо відкрите запитання, але я хотів отримати деякі думки, оскільки я виріс у світі, де вбудовані сценарії SQL були нормою, то всі ми були дуже обізнані про проблеми, що базуються на інжекції SQL, і наскільки крихким було sql, коли робити всюди стринг-маніпуляції.
Потім настала світанок ORM, де ви пояснювали запит до ORM і дозволяли йому генерувати свій власний SQL, який у багатьох випадках не був оптимальним, але був безпечним і легким. Ще одна гарна річ щодо шарів ORM або абстракції баз даних полягала в тому, що SQL генерувався з урахуванням його двигуна бази даних, тому я міг використовувати Hibernate / Nhibernate з MSSQL, MYSQL, і мій код ніколи не змінювався, це була лише деталь конфігурації.
Зараз швидко вперед до поточного дня, коли Micro ORM, здається, перемагає більше розробників, мені було цікаво, чому ми, здавалося б, взяли поворот на всю лінію-тематику sql.
Я мушу визнати, що мені подобається ідея відсутності файлів конфігурації ORM і можливість написати запит більш оптимальним чином, але відчувається, що я відкриваю себе назад до старих уразливостей, таких як інжекція SQL, і я також прив'язуюсь до один двигун бази даних, тому якщо я хочу, щоб моє програмне забезпечення підтримувало декілька двигунів баз даних, мені потрібно було б зробити ще кілька рядкових хакерів, які, здається, потім почнуть робити код нечитабельним і більш крихким. (Перед тим, як хтось це згадає, я знаю, що ви можете використовувати аргументи на основі параметрів з більшістю мікроорганізмів, що забезпечує захист у більшості випадків від sql введення)
То які думки народів щодо такого роду? Я використовую Dapper як мій Micro ORM в цьому випадку і NHibernate як мій звичайний ORM в цьому сценарії, проте більшість у кожній галузі досить схожі.
Що я називаю вбудованим sql- це рядки SQL у вихідному коді. Раніше дизайнерські дебати над рядками SQL у вихідному коді відштовхувались від основного наміру логіки, саме тому статично набрані запити стилю linq стали настільки популярними, як і раніше, лише 1 мова, але з можливістю сказати C # і Sql на одній сторінці Зараз у вашому вихідному вихідному коді 2 мови змішані. Для уточнення, ін'єкція SQL - це лише одна з відомих проблем використання рядків sql, я вже згадую, що ви можете зупинити це з запитами на основі параметрів, однак я виділяю інші проблеми із вбудованим SQL-запитом у вихідний код, наприклад відсутність абстракції постачальника баз даних, а також втрата будь-якого рівня помилки часу компіляції під час запиту на основі рядкових запитів, це все питання, яким нам вдалося перейти до світанку ORM з їх функціональністю запитів вищого рівня,
Тому я менш зосереджений на окремих висвітлених питаннях, і тим більше уявлення про те, що тепер стає більш прийнятним знову мати рядки SQL безпосередньо у своєму вихідному коді, оскільки більшість Micro ORM використовують цей механізм.
Ось подібне питання, яке має кілька різних точок зору, хоча йдеться більше про вбудований sql без контексту мікроорганізмів: