To trochę otwarte pytanie, ale chciałem mieć pewne opinie, ponieważ dorastałem w świecie, w którym wbudowane skrypty SQL były normą, wtedy wszyscy byliśmy bardzo świadomi problemów opartych na wstrzykiwaniu SQL i tego, jak delikatny był SQL, kiedy wykonując manipulacje strunami w dowolnym miejscu.
Potem przyszedł początek ORM, w którym wyjaśniłeś zapytanie ORM i pozwoliłeś mu wygenerować własny SQL, który w wielu przypadkach nie był optymalny, ale był bezpieczny i łatwy. Kolejną dobrą rzeczą dotyczącą ORM lub warstw abstrakcji bazy danych było to, że SQL został wygenerowany z myślą o jego silniku bazy danych, więc mogłem używać Hibernate / Nhibernate z MSSQL, MYSQL, a mój kod nigdy się nie zmieniał, to był tylko szczegół konfiguracji.
Teraz, szybko do przodu, do dnia dzisiejszego, w którym Micro ORM wydają się wygrywać z większą liczbą programistów. Zastanawiałem się, dlaczego najwyraźniej podjęliśmy zwrot w całej sprawie in-line sql.
Muszę przyznać, że podoba mi się pomysł braku plików konfiguracyjnych ORM i możliwość napisania zapytania w bardziej optymalny sposób, ale wydaje mi się, że otwieram się na stare luki, takie jak wstrzykiwanie SQL, a także przywiązuję się do jeden silnik bazy danych, więc jeśli chcę, aby moje oprogramowanie obsługiwało wiele mechanizmów baz danych, musiałbym zrobić trochę więcej hackerów łańcuchów, które wydają się wtedy powodować, że kod staje się nieczytelny i delikatniejszy. (Tuż przed tym, jak ktoś o tym wspomina, wiem, że możesz używać argumentów opartych na parametrach w większości mikro orms, które w większości przypadków zapewniają ochronę przed wstrzyknięciem sql)
Więc jakie są opinie ludzi na ten temat? W tym przypadku używam Dappera jako mojej Micro ORM, a NHibernate jako mojej zwykłej ORM w tym scenariuszu, jednak większość w każdym polu jest dość podobna.
Co nazywam inline sqlto ciągi SQL w kodzie źródłowym. Kiedyś debaty projektowe nad ciągami SQL w kodzie źródłowym naruszały podstawową intencję logiki, dlatego statycznie wpisywane zapytania w stylu linq stały się tak popularne, że wciąż mają tylko 1 język, ale powiedzmy C # i Sql na jednej stronie, którą masz 2 języki wplecione w twój surowy kod źródłowy. Aby wyjaśnić, wstrzyknięcie SQL jest tylko jednym ze znanych problemów z użyciem ciągów SQL, już wspominam, że można temu zapobiec przy zapytaniach opartych na parametrach, ale podkreślam inne problemy z zakodowaniem zapytań SQL w kodzie źródłowym, takie jak brak abstrakcji dostawcy DB oraz utrata jakiegokolwiek poziomu błędu kompilacji przechwytywania w zapytaniach opartych na łańcuchach, to wszystko problemy, które udało nam się przejść z początkiem ORM z ich funkcją zapytań wyższego poziomu,
Dlatego mniej skupiam się na poszczególnych wyróżnionych problemach, a im większy obraz, tym bardziej, że teraz bardziej akceptowalne jest ponowne umieszczanie ciągów SQL bezpośrednio w kodzie źródłowym, ponieważ większość Micro ORM używa tego mechanizmu.
Oto podobne pytanie, które ma kilka różnych punktów widzenia, chociaż bardziej dotyczy wbudowanego sql bez kontekstu mikro orm: