Apa kesalahan paling umum dan anti-pola yang dibuat oleh pemrogram pengguna NHibernate? Tolong jelaskan mengapa itu adalah praktik buruk atau berikan tautan ke sumber daya untuk bacaan lebih lanjut.
Sebagai contoh:
- Salah satu anti-pola umum untuk programmer NHibernate baru adalah dengan menggunakan identitas / POID asli sebagai ganti dari ORM style onces. Baca lebih lanjut di sini ...
nhibernate
Darius Kucinskas
sumber
sumber
Jawaban:
Masalah pribadi saya "yang sering dijelaskan":
Anti-Pola
Bergaul dengan benda-benda terpisah (SaveOrUpdate atau Gabung ditambah beberapa kode berantakan) daripada menggunakan DTO. Semakin kompleks entitasnya, semakin berantakan kodenya. (Ini juga berarti bahwa ia bekerja dengan sangat baik dengan entitas sepele.) Ayende juga menyebutnya Pola Stripper dan menjelaskan masalah enkapsulasi.
Ketidaktahuan memahami ketidaktahuan dan menulis aplikasi NH seperti ketika menggunakan SQL eksplisit. Gejala dari itu: memanggil Pembaruan setelah mengubah objek, bertanya-tanya mengapa perubahan tetap ada bahkan jika Pembaruan belum dipanggil, bertanya-tanya bagaimana cara menghindari perubahan yang harus dipertahankan.
Tidak memahami transaksi dan pola unit kerja . Anti-pola yang sering: transaksi implisit, sesi-per-operasi dan sesi-per-aplikasi. Beberapa bacaan lagi:
Menggunakan acara NH untuk memasukkan logika aplikasi (mis. Ubah pelacakan di sisipkan dan perbarui pemicu)
Buat satu kelas per tabel . Beberapa orang tidak mengerti OOD, yang lain tidak mengerti desain relasional.
Kesalahan
penggunaan satu-ke-satu, bukan banyak-ke-satu. Saya mencoba menjelaskannya dalam jawaban ini .
Menggunakan join fetch dalam kombinasi dengan SetMaxResult. Jawaban terakhir saya terkait dengan topik itu:
Menulis entitas yang berubah sendiri . Ketika suatu entitas tidak secara tepat mengembalikan nilai yang telah ditetapkan oleh NH, itu dianggap kotor dan diperbarui di setiap sesi. Misalnya: mengganti koleksi persisten NH di setter properti.
Mungkin lebih banyak yang mengikuti.
sumber
" Pilih N + 1 Masalah ".
Di sinilah Anda akhirnya mengeksekusi pilih untuk setiap entitas yang ingin Anda manipulasi (N), dan pilih untuk mendapatkan daftar entitas (+1), alih-alih pemilihan tunggal dari semua entitas dan atributnya.
sumber
FluentNHibernate
sumber
Mencoba untuk mengabstraksikannya sehingga Anda bisa beralih ke Entity Framework (atau sesuatu yang lain) di kemudian hari.
Ini jauh, jauh lebih sulit daripada kebanyakan orang yang berusaha mewujudkannya. Ada banyak perbedaan di antara keduanya yang bisa membuat Anda tersandung dengan cara yang kadang-kadang cukup halus. Ini juga sangat tidak biasa untuk benar-benar diperlukan pada akhirnya - sangat banyak sehingga Anda dapat dengan cermat mencoba menerapkannya selama bertahun-tahun sebelum menemukan bahwa pendekatan Anda semuanya salah.
Selain itu, ini membatasi Anda untuk menggunakan banyak fitur NHibernate yang berguna dan penting seperti caching level dua, intersepsi, manajemen konkurensi, pelacakan perubahan, permintaan prefetch, dan sebagainya.
Jika benar-benar ada kebutuhan yang sah untuk beralih antara NHibernate dan Entity Framework, akan ada proyek yang dikembangkan secara aktif untuk mendukung ini di GitHub (mungkin sesuatu yang mirip dengan CommonServiceLocator) dengan banyak kontributor dan permintaan tarik.
sumber