Saya bekerja sedikit pada Zend_Db
library, yang menyertakan kelas untuk membuat kueri SQL
. Saya memutuskan untuk mencoba menangani setiap sintaks SQL yang bisa dibayangkan di WHERE
dan HAVING
klausa, karena beberapa alasan:
-
PHP adalah bahasa scripting yang mem-parsing dan mengkompilasi kode pada setiap permintaan (kecuali jika Anda menggunakan cache bytecode). Jadi lingkungan PHP sensitif terhadap pustaka kode besar -- lebih dari Java atau C# atau Python atau apa pun yang Anda miliki. Oleh karena itu, merupakan prioritas utama untuk menjaga perpustakaan tetap ramping semampu kita.
Semua
Zend_Db
library yang saya kerjakan adalah sekitar 2.000 baris kode PHP. Sebaliknya, Java Hibernate berada di urutan 118 ribu baris kode. Tapi itu tidak terlalu menjadi masalah karena perpustakaan Java sudah dikompilasi sebelumnya dan tidak harus dimuat pada setiap permintaan. -
Ekspresi SQL mengikuti tata bahasa generatif yang lebih ringkas, dan lebih mudah dibaca dan dipelihara dari konstruksi berbasis PHP yang Anda tunjukkan. Mempelajari tata bahasa ekspresi SQL jauh lebih mudah daripada mempelajari API yang dapat mensimulasikannya. Anda akhirnya mendukung "tata bahasa yang disederhanakan." Atau Anda memulai dengan cara itu, dan mendapati diri Anda dipaksa oleh komunitas pengguna Anda ke Fitur Creep sampai API Anda sangat rumit.
-
Untuk men-debug aplikasi yang menggunakan API semacam itu, Anda pasti memerlukan akses ke ekspresi SQL akhir, jadi ini tentang abstraksi paling bocor kamu bisa memiliki.
-
Satu-satunya keuntungan menggunakan antarmuka berbasis PHP untuk ekspresi SQL adalah membantu penyelesaian kode di editor pintar dan IDE. Tetapi ketika begitu banyak operator dan operan menggunakan konstanta string seperti
'>='
, Anda merusak kecerdasan penyelesaian kode apa pun.
perbarui: Saya baru saja membaca artikel blog yang bagus "Perpisahan dengan ORM ." Penulis, Aldo Cortesi, menyarankan untuk menggunakan Bahasa Ekspresi SQL dalam SQLAlchemy Python. Gula sintaksis dan kelebihan beban operator yang standar di Python (tetapi tidak didukung di PHP) menjadikannya solusi pembuatan kueri yang sangat efektif.
Anda mungkin juga melihat DBIx::Class Perl, tetapi akhirnya menjadi sangat jelek.