Apa saja manfaat dari "Mikro-ORM"?


21

Saya telah melihat apa yang disebut "Mikro ORM" seperti Dapper dan (pada tingkat yang lebih rendah karena bergantung pada. NET 4.0) Besar-besaran karena ini mungkin lebih mudah untuk diterapkan di tempat kerja daripada ORM full-blown sejak sistem kami saat ini sangat bergantung pada prosedur tersimpan dan akan membutuhkan refactoring yang signifikan untuk bekerja dengan ORM seperti NHibernate atau EF. Apa manfaat menggunakan salah satu dari ini di atas ORM berfitur lengkap? Sepertinya hanya lapisan tipis di sekitar koneksi database yang masih memaksa Anda untuk menulis SQL mentah - mungkin saya salah tetapi saya selalu diberitahu alasan ORM di tempat pertama adalah sehingga Anda tidak perlu menulis SQL, itu dapat secara otomatis dihasilkan; terutama untuk multi-tabel bergabung dan memetakan hubungan antara tabel yang sulit dilakukan dalam SQL murni tetapi sepele dengan ORM.

Misalnya, melihat contoh Dapper:

var connection = new SqlConnection(); // setup here...
var person = connection.Query<Person>("select * from people where PersonId = @personId", new { PersonId = 42 });

Bagaimana itu berbeda dari menggunakan lapisan data ADO.NET yang dikontrol, kecuali bahwa Anda tidak harus menulis perintah, mengatur parameter dan saya kira memetakan entitas kembali menggunakan Builder. Sepertinya Anda bahkan bisa menggunakan panggilan prosedur tersimpan sebagai string SQL.

Apakah ada manfaat nyata lainnya yang saya lewatkan di sini di mana ORM Mikro masuk akal untuk digunakan? Saya tidak benar-benar melihat bagaimana ini menghemat apa pun melalui cara "lama" menggunakan ADO.NET kecuali mungkin beberapa baris kode - Anda masih harus menulis untuk mencari tahu apa yang perlu Anda jalankan SQL (yang bisa menjadi berbulu) dan Anda masih harus memetakan hubungan antar tabel (bagian yang paling membantu dengan ORM IMHO).


+1: Anda tetap akan membutuhkan bahasa permintaan apa pun, jadi Anda sebaiknya tetap menggunakan sesuatu yang familier seperti linq atau sql, tetapi mengembalikan jenis anonim seperti pada contoh Anda tampaknya tidak memetakan model relasional ke domain yang dibeton. model. Itu aneh bagiku.
Steven Evers

Ya, saya tidak dapat menemukan contoh konkret Dapper, di situs untuk itu ia benar-benar melakukannya var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });dan kemudian dog.First().Agemengakses properti.
Wayne Molina

5
Contoh tidak mengembalikan jenis anonim, kata kunci "var" dapat digunakan sebagai pengganti tipe konkret di C # untuk menyimpan pengetikan tambahan, kueri itu akan mengembalikan IEnumerable <Person>.
Ed James

1
Alasan utamanya adalah biaya overhead yang lebih rendah untuk terus-menerus memeriksa dalam sprocs dan kemudian ingat untuk memperbarui sekitar dua lusin file SQL, belum lagi harus menyimpan procs untuk kode CRUD sepele.
Wayne Molina

2
Manfaat utama untuk tidak menggunakan sprocs untuk menyimpan semua kode (dan saya menggunakan kode dengan sengaja di sini, termasuk SQL dan bahasa pilihan Anda lainnya) dalam sistem kontrol versi yang sama. Saya belum menemukan VCS database cross-DB yang baik.
Ed James

Jawaban:


12

Manfaat:

  • Kinerja serupa dengan SqlCommand mentah dengan DataReader dan penguraian.
  • Tidak perlu menggulung lapisan konversi Anda sendiri untuk DataReader.

Cukup banyak, jujur ​​saja. Anda memiliki pembungkus yang sangat ringan untuk koneksi sql Anda yang akan melakukan konversi objek untuk Anda. Anda dapat, tentu saja, menyempurnakan pertanyaan tanpa harus berurusan dengan SQL yang dibuat secara otomatis.

Kekurangan:

  • Bahkan tidak sedikit aman. Jika Anda membuat kesalahan ketik pada SQL, server CI Anda tidak akan menangkapnya, Anda harus berharap itu tertangkap selama UI otomatis atau pengujian fungsional.
  • Rasa sakit untuk dipertahankan. Anda punya banyak pernyataan SQL sebaris yang melakukan berbagai pertanyaan yang tidak memiliki ikatan kuat dengan arsitektur DB. Hal ini dapat dengan mudah menyebabkan kueri yang "tertinggal" ketika struktur DB yang mendasarinya berubah, yang, sekali lagi, Anda tidak akan melihat saat membangun.

Mereka memiliki tempat mereka, dan mereka adalah alat yang sangat efektif yang dapat mengambil beberapa "pekerjaan keledai" dari pengembang ketika berinteraksi dengan DB, tetapi pada kenyataannya mereka tidak bisa menggantikan ORM penuh dalam skala besar sistem untuk permintaan yang tidak kritis terhadap kinerja, hanya karena meningkatnya biaya pemeliharaan.

Jika Anda berjuang dengan kinerja pada permintaan DB, saya akan menyarankan bahwa akan lebih baik untuk menggunakan kerangka pemetaan ini hanya dengan Prosedur Tersimpan, untuk mendapatkan indikasi waktu kompilasi apakah SQL Anda valid (plus manfaat kinerja tambahan) .


Ada perpustakaan yang dapat digunakan sebagai pembungkus untuk orms mikro ini yang dapat mengurangi masalah yang Anda sebutkan dengan kesalahan ketik. Contoh: add-on
Simple Crud

3

Di situs ORP mikro PetaPoco ia menjelaskan beberapa keuntungan dengan ORM lain. untuk menjelaskan lebih lanjut

PetaPoco adalah mikro-ORM kecil, cepat, satu file untuk .NET dan Mono.

  • Seperti Massive, ini adalah satu file yang mudah Anda tambahkan ke proyek apa pun
  • Tidak seperti Massive ia bekerja dengan POCO yang sangat diketik
  • Seperti Massive, sekarang juga mendukung Ekspose dinamis juga - baca lebih lanjut
  • Seperti ActiveRecord, ia mendukung hubungan yang erat antara objek dan tabel database
  • Seperti SubSonic, ia mendukung pembuatan kelas poco dengan templat T4
  • Seperti Dapper, ini cepat karena menggunakan generasi metode dinamis (MSIL) untuk menetapkan nilai kolom ke properti

1

Bagaimana itu berbeda dari menggunakan lapisan data ADO.NET yang dikontrol, kecuali bahwa Anda tidak harus menulis perintah, mengatur parameter dan saya kira memetakan entitas kembali menggunakan Builder. Sepertinya Anda bahkan bisa menggunakan panggilan prosedur tersimpan sebagai string SQL.

Saya percaya itu adalah manfaat utama dari Mikro-ORM, untuk mendapatkan manfaat lain dari ORM Anda harus menggunakan yang penuh sesak nafas. Itu dan kodenya relatif lebih kecil, jadi jika Anda perlu menyesuaikannya, itu akan lebih mudah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.