Saya menggunakan mikro-ORM PetaPoco. Memang sangat mudah dan aman untuk bekerja dengan database menggunakan alat ORM, tetapi satu-satunya hal yang saya benci adalah kode tambahan. Saya biasa meletakkan sebagian besar kode dalam database itu sendiri dan menggunakan semua fitur RDBMS seperti Stored Procedures, Triggers etc., yang dibuat untuk menangani dengan lebih baik.
Saya ingin tahu kapan tidak menggunakan ORM untuk Prosedur / Pemicu Tersimpan dan sebaliknya.
Jawaban:
ORM (Object-relational mapping) tidak saling eksklusif dengan Stored Procedures. Sebagian besar ORM dapat menggunakan prosedur tersimpan. Kebanyakan ORM menghasilkan Prosedur Tersimpan jika Anda memilihnya. Jadi masalahnya bukan atau.
ORM dapat menghasilkan SQL yang tidak dapat diterima (dalam hal kinerja) dan Anda mungkin kadang-kadang ingin mengesampingkan SQL itu dengan SQL buatan tangan. Salah satu cara untuk mencapai ini adalah dengan menggunakan SP (prosedur tersimpan).
Di DotNet, Jangan gunakan prosedur tersimpan jika:
Jika Anda tidak terbiasa dengan prosedur tersimpan (bukan kasus Anda, tetapi termasuk untuk kelengkapan).
Jika Anda tidak ingin memperkenalkan lapisan kompleksitas dan versifying ke proyek Anda.
Anda membuat aplikasi yang harus bekerja dengan basis data yang berbeda atau yang harus direplikasi di beberapa server basis data (pembatasan terakhir ini hanya berlaku untuk beberapa basis data).
Perhatikan bahwa pemicu tidak dapat dibandingkan dengan ORM. Pemicu melakukan fungsi yang lebih baik tidak ada dalam kode aplikasi Anda (seperti mencatat atau menyinkronkan data di seluruh basis data).
Beberapa orang lebih suka menggunakan Stored Procedures daripada SQL dalam kode untuk alasan yang berbeda seperti keamanan (misalnya untuk mencegah injeksi SQL) dan untuk kecepatan yang diklaim. Namun, ini agak bisa diperdebatkan dan perlu diskusi rinci.
Jika ORM Anda tidak dapat menghasilkan Prosedur Tersimpan, dan Anda harus menulis sistem yang besar, maka Anda perlu mempertimbangkan pengkodean tangan ekstra berdasarkan kasing Anda.
sumber
ORMs sering menganggap bahwa database ada untuk melayani ORM. Tetapi biasanya basis data ada untuk melayani perusahaan, yang mungkin memiliki ratusan dan ratusan aplikasi yang ditulis dalam berbagai bahasa.
Tetapi ini hanya "ORM vs. Stored Procedures" jika Anda menggunakan ORM yang tidak dapat memanggil prosedur tersimpan. Kalau tidak, itu adalah kasus menentukan di mana kode logika bisnis.
Di mana pun Anda memberi kode logika bisnis, tugasnya adalah memastikan database berubah dari satu kondisi konsisten ke kondisi konsisten lainnya terlepas dari aplikasi mana yang membuat perubahan . Jadi, Anda benar-benar hanya memiliki dua pilihan praktis - kode sekali dalam database, atau kode itu sekali dalam lapisan akses data "tak tertembus".
Waspadalah terhadap antarmuka baris perintah dbms jika Anda menggunakan DAL "yang tidak dapat ditembus".
sumber
Permintaan sederhana -> ORM
Permintaan kompleks -> Prosedur Tersimpan
sumber
Pemicu harus digunakan sebagai invarian catatan atau terdiri dari aturan bisnis vital, IMHO.
Masalah orms:
sumber
Tidak setuju. Permintaan ORM hanya lebih sederhana jika Anda tahu ORM lebih baik dari yang Anda tahu SQL. ORM menghasilkan kode yang jauh lebih banyak, jauh lebih sulit untuk mempertahankan IMO. Satu-satunya orang yang mendapat manfaat dari ORM adalah pemegang saham perusahaan yang menjual ORM (misalnya Microsoft).
sumber