Saya melihat evaluasi ORM.
Saya telah menggunakan SubSonic , Linq-to-SQL dan Entity Framework . Saya memiliki tim pengembang mulai dari junior hingga senior.
Apa kriteria untuk mengevaluasi ORM untuk. NET?
Saya melihat evaluasi ORM.
Saya telah menggunakan SubSonic , Linq-to-SQL dan Entity Framework . Saya memiliki tim pengembang mulai dari junior hingga senior.
Apa kriteria untuk mengevaluasi ORM untuk. NET?
Jawaban:
Itu pertanyaan yang sarat.
Ada banyak ORM yang sangat baik mendekati subjek dengan filosofi yang berbeda.
Tidak ada yang sempurna dan semua cenderung menjadi kompleks segera setelah Anda menyimpang dari jalur emas mereka (dan kadang-kadang bahkan ketika Anda berpegang teguh pada itu).
Apa yang harus Anda tanyakan pada diri sendiri ketika memilih ORM:
Apa yang perlu dilakukan untuk Anda?
Jika Anda sudah memiliki seperangkat persyaratan untuk aplikasi Anda, maka Anda harus memilih ORM yang lebih cocok dengan ini daripada hipotesis 'terbaik'.
Apakah data Anda dibagikan atau hanya lokal?
Banyak hairiness dalam ORM disebabkan oleh bagaimana mereka menangani konkurensi dan perubahan data dalam database ketika banyak pengguna memegang versi dari data yang sama.
Jika datastore Anda hanya untuk satu pengguna, maka sebagian besar ORM akan melakukan pekerjaan dengan baik. Namun, tanyakan pada diri sendiri beberapa pertanyaan sulit dalam skenario multi-pengguna: bagaimana cara penguncian ditangani? Apa yang terjadi ketika saya menghapus objek? Bagaimana pengaruhnya terhadap objek terkait lainnya? Apakah ORM bekerja dekat dengan logam backend atau apakah itu menyimpan banyak data (meningkatkan kinerja dengan mengorbankan peningkatan risiko staleness).
Apakah ORM disesuaikan dengan baik untuk jenis aplikasi Anda? ORM tertentu mungkin sulit untuk dikerjakan (banyak overhead kinerja, sulit dikodekan) jika digunakan dalam layanan atau duduk di dalam aplikasi web. Sebaliknya mungkin bagus untuk aplikasi desktop.
Apakah Anda harus melepaskan perangkat tambahan khusus basis data?
ORM cenderung menggunakan seperangkat SQL common denominator terendah untuk memastikan mereka bekerja dengan banyak backend database yang berbeda.
Semua ORM akan berkompromi pada fitur yang tersedia (kecuali jika mereka secara khusus menargetkan backend tunggal) tetapi beberapa akan memungkinkan Anda untuk menerapkan perilaku tambahan untuk mengeksploitasi peningkatan spesifik yang tersedia di backend yang Anda pilih.
Perangkat tambahan khusus-db adalah kemampuan pencarian Teks Lengkap misalnya; pastikan ORM Anda memberi Anda cara untuk mengakses fitur-fitur ini jika Anda membutuhkannya.
Bagaimana ORM mengelola perubahan dalam model data?
Beberapa dapat memperbarui DB secara otomatis dalam ukuran tertentu, yang lain tidak melakukan apa-apa dan Anda harus melakukan pekerjaan kotor sendiri; lainnya menyediakan kerangka kerja untuk menangani perubahan yang memungkinkan Anda mengontrol pembaruan basis data.
Apakah Anda ingin memasangkan aplikasi Anda ke objek ORM atau Anda lebih suka menangani POCO dan menggunakan adaptor untuk kegigihan?
Yang pertama biasanya mudah ditangani tetapi membuat dependensi pada objek data ORM khusus Anda di mana-mana, yang terakhir lebih fleksibel, dengan biaya sedikit lebih banyak kode.
Apakah Anda perlu memindahkan objek Anda dari jarak jauh?
Tidak semua ORM sama dalam hal mengambil objek dari server jauh, perhatikan dengan cermat apa yang mungkin atau tidak mungkin dilakukan. Beberapa efisien, yang lain tidak.
Apakah ada seseorang yang bisa Anda hubungi?
Apakah ada dukungan komersial yang baik? Seberapa besar dan aktif komunitas di sekitar proyek?
Apa masalah pengguna yang ada dengan produk?
Apakah mereka mendapatkan solusi cepat?
Beberapa ORM yang saya lihat:
Ada banyak yang lain tentu saja.
Anda dapat melihat situs kontroversial ORM Battle yang mencantumkan beberapa tolok ukur kinerja, meskipun Anda harus menyadari bahwa kecepatan mentah belum tentu merupakan faktor paling penting untuk proyek Anda dan bahwa produsen situs web adalah DataObject.Net.
Saya menggunakan NHibernate dan merasa cukup bagus.
Dalam kasus saya, ditautkan ke database MS Sql, tetapi Anda dapat terhubung ke database lain.
Tidak perlu waktu lama untuk bangun dan berjalan - cukup peta objek Anda ke model - Saya menggunakan file xml tetapi Anda dapat melakukannya dengan lancar dalam kode. Ada komunitas yang hebat, dan secara pribadi saya menemukan pekerjaan Ayende sangat membantu - Saya menggunakan NHProf yang merupakan alat profil sql.
Saya kebanyakan menggunakan fungsi di luar kotak - pemetaan objek lurus, tetapi saya juga menggunakan Bahasa Qubernate Hibernate, yang cukup mudah untuk dipahami.
Sayangnya, dalam tiga pekerjaan terakhir saya, kami memiliki tiga ORM rumahan. Dalam setiap kasus, mereka kebanyakan mengisap karena berbagai alasan.
Saya baru-baru ini mengevaluasi Entity Framework 4 dan dukungan POCO-nya (langkah-langkah bagus ada di sini ) dan saya benar-benar terkesan dengan betapa bagusnya itu tetap keluar dari wajah saya dan membuat saya merasa seperti sedang pemrograman lagi daripada menggiring data.
Saya suka Linq untuk Sql banyak. Sederhana dan memiliki desainer yang layak. Namun, saya berharap untuk mengakhiri kehidupan demi kerangka kerja Entity. Saya ingin dapat memanfaatkan kemampuan untuk memodifikasi generator sehingga saya dapat memiliki objek yang disesuaikan.
Manfaat terbesar yang dimiliki orang-orang ini dibandingkan orang lain (menurut saya) adalah mereka tidak cocok dengan VS. Ini juga negatif karena Anda berada di tangan MS (lihat Linq ke Sql).
[PENOLAKAN: Saya bekerja untuk DevExpress]
Anda dapat melihat tangkapan layar dari aplikasi-aplikasi biasa yang dibuat oleh kerangka kerja aplikasi DevExpress di sini . Halaman ini juga berisi ulasan singkat tentang produk kami. Untuk informasi lebih lanjut tentang alasannya , saya sarankan Anda memeriksa halaman produk masing-masing di situs web kami.
Sedangkan untuk DevExpress XAF dan XPO, berikut adalah penjelasan yang bagus tentang mengapa memilih kerangka kerja aplikasi kami. Plus, kami menyediakan dukungan dan dokumentasi, yang juga penting dan layak disebutkan. Jangan ragu untuk menghubungi kami jika ada pertanyaan.
Kami menggunakan NHibernate + Fluent NHibernate, dengan Linq-to-Sql pada proyek-proyek kecil. Alasan untuk ini adalah:
1) (Bukan alasan utama) NHibernate tampaknya memiliki faktor "rasa hormat" yang lebih tinggi di antara para pengembang (apakah ini benar?),
2) Dibandingkan dengan linq-to-SQL, nHibernate memungkinkan pemetaan ORM antara objek dan entitas Db yang tidak memetakan 1-ke-1,
3) Kami belum secara ekstensif membandingkan nHibernate dengan Entity Framework 4.0 tetapi ini perbandingan yang bagus: http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx
nHibernate memang memiliki sedikit kurva pembelajaran yang curam dan peta XML-nya bisa sangat bertele-tele, tetapi mulailah dengan dokumentasi situs Fluent Nhibernate dan lakukan cara Anda mundur.
Tidak ada kerangka kerja ORM "terbaik" karena mereka semua memiliki kombinasi kekuatan dan kelemahan yang berbeda dan cenderung menjadi kasus bahwa jika pengembang memilih untuk fokus membuat satu area lebih baik, ada area lain yang menderita dalam perbandingan (kode pertama vs model pertama vs basis data pertama).
Di sisi lain, ada beberapa yang sangat bagus yang beberapa di antaranya akan lebih cocok dengan keadaan dan filosofi pribadi Anda daripada yang lain.
Sunting: Untuk apa nilainya, saya saat ini menggunakan Linq to SQL - sebagian besar karena itu ada di sana meskipun sebagian karena ia melakukan banyak hal untuk usaha minimal dan mungkin akan berkembang ke Entity Framework lagi "karena itu ada" (meskipun demikian juga ada banyak tentang EF4 yang benar dan juga beberapa hal yang salah). Perhatian, terutama dengan yang terakhir, harus kinerja tetapi untuk sebagian besar kasus saya itu bukan masalah besar dan kemampuan untuk menjalankan Data Dinamis dan OData dari model (L2S dan EF) memiliki manfaat yang cukup besar bagi saya dalam hal " murah "menang.
Saya akan menyarankan Anda untuk melihat pada DevExpress XPO . Ini bersama dengan DevExpress XAF akan membuat hidup setiap pengembang mudah setelah kurva belajarnya dilewati.
Kami beruntung dengan Entity Framework. Namun, situasi kami agak tidak biasa - kami melakukan pengumpulan data untuk tim pelapor, sehingga mereka benar-benar merancang basis data. Kami mendapatkan DB dan kemudian hanya menggunakan EF untuk menghasilkan kelas akses data dari itu. Berfungsi bagus untuk kami, tetapi kami hanya melakukan banyak data massal, jadi saya tidak dapat menjamin seberapa baik kerjanya di lingkungan yang lebih transaksional.
NHibernate (+ FluentNHibernate) akan menjadi opsi default untuk saya. Ini sangat fleksibel, dapat dikembangkan, dan kuat. Ia memiliki sejumlah besar pengguna dan dipelihara dengan sangat aktif. Kelemahannya adalah kurva belajar yang curam.
LightSeed dari MindScape sederhana dan ramah pengguna, tetapi masih cukup fleksibel dan mampu. Ini memiliki permukaan desainer seperti L2S / EF dan implementasi UnitOfWork.
Yah, tidak ada pilihan "terbaik" tapi saya akan mengatakan bahwa Linq lama ke SQL memenuhi kebutuhan Anda. Ini bukan ORM "benar", tetapi sangat ringan dan memberi Anda fleksibilitas untuk menulis kode tanpa menyadarinya, jika itu masuk akal. Maksud saya adalah bahwa Anda dapat terus menulis kode seperti biasa, tanpa harus benar-benar menyadari Linq selain memiliki dbml
file (s). Anda masih bisa menulis abstraksi atasnya, menggunakan pola Repositori atau Gateway, dan L2S memenuhi peran utama ORM, yaitu untuk menyiasati Object-Relational Mismatch.
Entity Framework sedikit berat, dan sementara saya hanya mencoba-coba sedikit, itu lebih "di wajah Anda" daripada Linq dasar untuk Sql, tetapi EF jauh lebih ORM benar daripada Linq. Saya akan melihat semua kriteria yang Anda cari dalam ORM. Apakah hanya karena Anda ingin menghindari harus menulis SQL mentah atau, lebih buruk lagi, memiliki ratusan Prosedur Tersimpan? Apakah Anda memerlukan beberapa fitur tambahan yang tidak dapat disediakan Linq mentah ke Sql? Anda perlu menjawab pertanyaan-pertanyaan itu, tetapi berdasarkan persyaratan singkat Anda ("ringan dan mudah digunakan") Saya pikir Linq sedikit lebih mudah daripada sesuatu seperti Subsonic, dan terintegrasi dengan Visual Studio.