Bu biraz açık uçlu bir soru, ancak bazı düşünceler istedim, satır içi SQL betiklerinin norm olduğu bir dünyada büyüdüğümde, hepimiz SQL enjeksiyon temelli sorunların ve sql'nin ne kadar kırılgan olduğunun farkında olduk. her yerde dize manipülasyonları yapıyorum.
Sonra, ORM'nin sorgusunu anlattığınız ORM'nin şafağı geldi ve çoğu durumda optimal olmayan ancak güvenli ve kolay olan kendi SQL'ini yaratmasına izin verdi . ORM'ler veya veritabanı soyutlama katmanları hakkında bir başka iyi şey de SQL'in veritabanı motorunu göz önünde bulundurarak üretilmesiydi, bu yüzden Hibernate / Nhibernate ile MSSQL, MYSQL kullanabildim ve kodum hiçbir zaman bir yapılandırma detayı olmadı.
Şimdi, Micro ORM'lerin daha fazla geliştiriciyi kazandığı görülmekte olan güne hızlı ilerleyin. Neden tüm çevrimiçi sql konusunu neden U-Turn aldığımızı merak ediyordum.
ORM yapılandırma dosyaları olmadığı fikrinden hoşlandığımı ve sorgumu daha optimal bir şekilde yazabildiğimi itiraf etmeliyim ama kendimi SQL enjeksiyonu gibi eski kırılganlıklara geri açıyor gibi hissediyorum ve ayrıca kendime bağlıyorum bir veritabanı motoru, eğer yazılımımın birden fazla veritabanı motorunu desteklemesini istersem, daha sonra kodu okunamayan ve daha kırılgan hale getirmeye başlayacak gibi daha fazla string hackeri yapmam gerekecekti. (Biri bahsetmeden hemen önce, çoğu durumda sql enjeksiyonundan koruma sağlayan çoğu mikroorganizma ile parametre tabanlı argümanları kullanabileceğinizi biliyorum.)
Peki, halklar bu tür şeyler hakkında ne düşünüyor? Bu durumda Dapper'ı buradaki Micro ORM'im ve bu senaryoda da normal ORM'im olarak NHibernate kullanıyorum, ancak her alanda çoğu benzer.
Satır içi sql olarak ne kastediyorumkaynak kod içindeki SQL dizeleridir. Kaynak kodda, mantığın temel amacından uzaklaşan SQL dizeleri üzerinde tasarım tartışmaları vardı, bu nedenle statik olarak yazılan linq stil sorguları hala sadece 1 dilde popüler hale geldi, ancak bir sayfada C # ve Sql diyelim. Artık ham kaynak kodunuzla iç içe geçmiş 2 dil. Sadece açıklığa kavuşturmak için, SQL enjeksiyonu sql dizeleriyle ilgili bilinen sorunlardan sadece bir tanesidir, bunun parametre bazlı sorgularla olmasını engelleyebileceğinizden bahsetmiştim, ancak kaynak kodunuzda SQL sorgularının gömülmesiyle ilgili diğer sorunları vurguladım. DB Satıcısı soyutlama eksikliğinin yanı sıra, dize tabanlı sorgularda yakalanan herhangi bir derleme zamanı hatası seviyesini kaybetmenin yanı sıra, tüm bunlar, ORM'lerin şafağında üst düzey sorgulama işlevleriyle başa çıkmayı başardığımız sorunlardır.
Bu yüzden, tek tek vurgulanan konulara daha az odaklandım ve daha büyük bir resim, çoğu mikro ORM'nin bu mekanizmayı kullanması nedeniyle SQL dizelerinin doğrudan kaynak kodunuzda tekrar kullanılması daha kabul edilebilir hale gelmesidir.
Aşağıda, mikro orm bağlamı olmayan satır içi sql hakkında daha fazla olmasına rağmen, birkaç farklı bakış açısına sahip benzer bir soru var:
https://stackoverflow.com/questions/5303746/is-inline-sql-hard-coding