Di mana aplikasi yang sesuai dengan JDBC harus menyimpan pernyataan SQL-nya dan mengapa?
Sejauh ini, saya berhasil mengidentifikasi opsi-opsi ini:
- Hardcode di objek bisnis
- Disematkan dalam klausa SQLJ
- Mengenkapsulasi dalam kelas terpisah misalnya Objek Akses Data
- Didorong metadata (pisahkan skema objek dari skema data - jelaskan pemetaan di antara keduanya dalam metadata)
- File eksternal (misalnya Properti atau file Sumber Daya)
- Prosedur Tersimpan
Apa “Pro” dan “Kontra” untuk masing-masing?
Haruskah kode SQL dianggap sebagai "kode" atau "metadata"?
Haruskah prosedur tersimpan digunakan hanya untuk pengoptimalan kinerja atau merupakan abstraksi sah dari struktur database?
Apakah kinerja merupakan faktor kunci keputusan? Bagaimana dengan vendor lock-in ?
Apa yang lebih baik - kopling longgar atau kopling ketat dan mengapa?
DIEDIT: Terima kasih semuanya atas jawabannya - berikut ringkasannya:
Metadata didorong yaitu Object Relational Mappings (ORM)
Kelebihan:
- Sangat abstrak - Server DB dapat diaktifkan tanpa perlu mengubah model
- Tersebar luas - praktis standar
- Mengurangi jumlah SQL yang dibutuhkan
- Dapat menyimpan SQL dalam file sumber daya
- Performa (biasanya) dapat diterima
- Pendekatan berbasis metadata
- (Database) independensi vendor
Kekurangan:
- Menyembunyikan SQL dan niat developer sejati
- SQL sulit untuk direview / diubah oleh DBA
- SQL mungkin masih diperlukan untuk kasus ganjil
- Dapat memaksa penggunaan bahasa query berpemilik misalnya HQL
- Tidak cocok untuk pengoptimalan (abstraksi)
- Bisa kekurangan integritas referensial
- Pengganti karena kurangnya pengetahuan SQL atau kurangnya perawatan untuk kode di DB
- Jangan pernah cocok dengan kinerja database asli (bahkan jika mendekati)
- Kode model sangat erat digabungkan dengan model database
Hardcode / dienkapsulasi dalam lapisan DAO
Kelebihan:
- SQL disimpan dalam objek yang mengakses data (enkapsulasi)
- SQL mudah untuk ditulis (kecepatan pengembangan)
- SQL mudah dilacak saat ada perubahan
- Solusi sederhana (tidak ada arsitektur yang berantakan)
Kekurangan:
- SQL tidak dapat ditinjau / diubah oleh DBA
- SQL cenderung menjadi khusus DB
- SQL bisa menjadi sulit untuk dipertahankan
Prosedur Tersimpan
Kelebihan:
- SQL disimpan dalam database (dekat dengan data)
- SQL diurai, dikompilasi, dan dioptimalkan oleh DBMS
- SQL mudah ditinjau / diubah oleh DBA
- Mengurangi lalu lintas jaringan
- Peningkatan keamanan
Kekurangan:
- SQL terikat ke database (vendor lock-in)
- Kode SQL lebih sulit untuk dipertahankan
File eksternal (misalnya Properti atau file Sumber Daya)
Pro
- SQL dapat diubah tanpa perlu membangun kembali aplikasi
- Memisahkan logika SQL dari logika bisnis aplikasi
- Repositori pusat dari semua pernyataan SQL - lebih mudah dikelola
- Lebih mudah dimengerti
Kekurangan:
- Kode SQL bisa menjadi tidak bisa dipelihara
- Lebih sulit untuk memeriksa kode SQL untuk kesalahan (sintaks)
Disematkan dalam klausa SQLJ
Kelebihan:
- Pemeriksaan sintaks yang lebih baik
Kekurangan:
- Hubungannya terlalu dekat dengan Jawa
- Performa lebih rendah dari JDBC
- Kurangnya kueri dinamis
- Tidak begitu populer