Ini sedikit pertanyaan terbuka tapi saya ingin beberapa pendapat, karena saya tumbuh di dunia di mana skrip SQL inline adalah norma, maka kita semua dibuat sangat sadar akan masalah berbasis injeksi SQL, dan seberapa rapuh sql ketika melakukan manipulasi string di semua tempat.
Kemudian tibalah awal dari ORM di mana Anda menjelaskan kueri ke ORM dan membiarkannya menghasilkan SQL sendiri, yang dalam banyak kasus tidak optimal tetapi aman dan mudah. Hal baik lainnya tentang ORM atau lapisan abstraksi basis data adalah bahwa SQL dihasilkan dengan mesin basis datanya, jadi saya bisa menggunakan Hibernate / Nhibernate dengan MSSQL, MYSQL dan kode saya tidak pernah berubah, itu hanya detail konfigurasi.
Sekarang maju cepat ke hari ini, di mana Mikro ORM tampaknya menang atas lebih banyak pengembang. Saya bertanya-tanya mengapa kami tampaknya mengambil U-Turn pada seluruh subjek sql in-line.
Saya harus mengakui bahwa saya menyukai gagasan tidak ada file konfigurasi ORM dan dapat menulis permintaan saya dengan cara yang lebih optimal tetapi rasanya seperti saya membuka diri kembali ke kerentanan lama seperti injeksi SQL dan saya juga mengikat diri untuk satu mesin basis data jadi jika saya ingin perangkat lunak saya mendukung beberapa mesin basis data saya perlu melakukan beberapa peretasan string yang tampaknya kemudian mulai membuat kode tidak dapat dibaca dan lebih rapuh. (Tepat sebelum seseorang menyebutkannya, saya tahu Anda dapat menggunakan argumen berbasis parameter dengan kebanyakan mikro orms yang menawarkan perlindungan dalam kebanyakan kasus dari injeksi sql)
Jadi apa pendapat orang tentang hal semacam ini? Saya menggunakan Dapper sebagai Mikro ORM saya dalam hal ini dan NHibernate sebagai ORM biasa saya dalam skenario ini, namun sebagian besar di setiap bidang sangat mirip.
Apa yang saya sebut sebagai inline sqladalah string SQL dalam kode sumber. Dulu ada perdebatan desain atas string SQL dalam kode sumber yang mengurangi niat mendasar dari logika, itulah sebabnya mengapa gaya query linq yang diketik secara statis menjadi sangat populer hingga hanya 1 bahasa, tetapi dengan katakanlah C # dan Sql dalam satu halaman yang Anda miliki 2 bahasa bercampur dalam kode sumber mentah Anda sekarang. Hanya untuk memperjelas, injeksi SQL hanyalah salah satu masalah yang diketahui dengan menggunakan string sql, saya sudah menyebutkan Anda dapat menghentikan hal ini terjadi dengan query berbasis parameter, namun saya menyoroti masalah lain dengan memiliki query SQL yang tertanam dalam kode sumber Anda, seperti kurangnya abstraksi DB Vendor serta kehilangan tingkat kesalahan waktu kompilasi pada permintaan berbasis string, semua ini adalah masalah yang kami berhasil selangkahi dengan fajar ORM dengan fungsionalitas kueri tingkat yang lebih tinggi,
Jadi saya kurang fokus pada isu-isu yang disoroti secara individu dan lebih banyak gambaran yang lebih besar dari sekarang menjadi lebih dapat diterima untuk memiliki string SQL langsung dalam kode sumber Anda lagi, karena kebanyakan Mikro ORM menggunakan mekanisme ini.
Berikut adalah pertanyaan serupa yang memiliki beberapa sudut pandang berbeda, meskipun lebih tentang sql inline tanpa konteks organisasi mikro: