Saya punya proyek yang saya kerjakan saat ini menggunakan Tomcat, Spring 4, Spring Security, MySQL, dan JPA w / Hibernate.
Saya memilih JPA dari sudut pandang bahwa itu seharusnya membuat swapping implementasi yang mendasari penyedia ORM mulus, atau setidaknya kurang menyakitkan. Saya akan mengatakan bahwa ini secara mental menggunakan spec atas implementasi (JAX-RS) adalah sudut pandang standar komunitas pengembangan Java.
Saya ingin tahu apakah ini benar-benar tugas yang pantas dilakukan. Saya yakin jika saya menggunakan Hibernate secara langsung, saya akan mendapatkan kekuatan karena saya bisa menggunakan fitur yang bukan bagian dari spesifikasi JPA utama.
Bagian dari kekhawatiran saya berasal dari ide YAGNI. Saya pada dasarnya pemrograman dalam gaya dan mode tertentu (menggunakan JPA, bukan Hibernate) sehingga di beberapa titik di masa depan saya bisa menukar implementasi ORM saya. Saya sangat meragukan bahwa hal itu akan pernah terjadi selama masa pakai produk, jadi pada dasarnya saya berupaya menjadi sesuatu yang mungkin tidak akan pernah saya manfaatkan.
Apa yang kamu pikirkan? Apakah "pemrograman ke antarmuka" sepadan dengan hal-hal seperti JPA? Pernahkah Anda benar-benar menukar seluruh implementasi ORM dalam suatu produk? Apakah Anda pernah dapat sepenuhnya menghindari abstraksi dari sesuatu seperti JPA bocor? Saya pribadi sudah memiliki satu panggilan SQL asli (untuk membersihkan tabel database), dan ada sesuatu yang saya ingin selesaikan dengan yang dibangun ke dalam spesifikasi JPA (dapatkan / atur awalan untuk metode Anda, dan perbedaan antara ANGGOTA DARI / IN, yang hanya mengikat diri saya pada implementasi yang mendasari akan membuat saya kesempatan untuk menghindari.
sumber
Jawaban:
Dalam pengalaman saya, proyek khas perusahaan tidak pernah bertukar:
Saya tidak tahu jumlahnya, tetapi persentase aplikasi 2-tier yang telah saya lihat terapkan dan kemudian ubah salah satu dari hal-hal itu mungkin akan kurang dari 10%. Jika itu terjadi, itu jarang terjadi, dan itu biasanya terjadi dalam 2-3 bulan pertama proyek ketika orang masih dalam mode penemuan. Sebagian besar sistem yang saya tahu masih berjalan pada platform aslinya 8-10 tahun kemudian.
Lebih sering daripada mengganti ORM, apakah Anda ingin tahu apa yang lebih sering saya lihat? Menghapus ORM sepenuhnya untuk drop down ke SQL karena masalah kinerja. Jadi tidak peduli apa, dalam hal ini, Anda akan menulis ulang.
Sejauh implementasi agnostik, itu mitos. Ini benar-benar sama dengan meredup. Jadi pendekatan saya adalah merangkul lapisan data. Jadikan itu bagian kelas pertama dari bahasa dan desain Anda. Itu membuat proyek lebih bahagia, lebih sukses.
sumber
Apakah itu layak?
Itu sepenuhnya tergantung pada aplikasi.
Jika Anda menulis aplikasi internal untuk satu perusahaan, lupakan saja. Database itu akan hidup lebih lama dari aplikasi selama bertahun-tahun, mungkin beberapa dekade.
Kecuali tentu saja Anda telah diberikan untuk memahami sejak awal bahwa database direncanakan akan diganti oleh sesuatu yang lain dalam waktu dekat.
Jika Anda menulisnya untuk dijual kepada pelanggan, yang mungkin memiliki mesin basis data yang berbeda, DAN persyaratannya sedemikian rupa sehingga seharusnya mendukung banyak mesin basis data, MAKA masuk akal.
Bagi sebagian besar orang yang menulis aplikasi Java, sebagian besar tidak relevan.
sumber
Dari pengalaman saya: tidak, itu tidak layak jika menggunakan JPA / Hibernate.
Memang, tetapi tidak ada hubungannya dengan JPA secara khusus. Anda dapat melakukan "pemrograman ke antarmuka" dari Hibernate. Ini bukan tentang menyembunyikan kerangka kerja di bawah standar, ini tentang SOLID .
Iya dan tidak. Salah satu produk perusahaan kami sebagian dimigrasi dari Hibernate ke jOOQ (yang tidak ada hubungannya dengan JPA). Itu bukan "proyek perusahaan biasa" yang disebutkan @codenheim, jadi bertukar mungkin saja.
Saya tidak melihat ada gunanya menukar Hibernate dengan ORM lain yang sesuai dengan JPA.
Tidak. Tidak mungkin karena JPA dan Hibernate sangat kompleks. Dan Anda harus berurusan dengan masalah kinerja dan kekurangan desain Hibernate pula.
sumber
Dengan risiko terdengar pelawan di sini, saya akan mengatakan, bahwa ya, itu sepadan. Dan itu tidak benar.
Masalahnya tidak banyak dalam beralih ORM Anda atau penyedia database seperti itu. Ini lebih merupakan masalah pemisahan keprihatinan dan tetap gesit.
Setelah Anda mulai mengandalkan beberapa detail implementasi perpustakaan, Anda mulai membuat keterkaitan yang lebih dalam dan lebih dalam.
Jika Anda tahu apakah implementasi ORM Anda adalah Hibernate, pengetahuan ini mulai merambah seluruh arsitektur aplikasi Anda. Dan setiap kali ada teknologi baru yang menggantikan Hibernate atau JPA secara menyeluruh seperti yang dilakukan Hibernate terhadap apa pun yang datang sebelumnya, Anda menemukan bahwa dependensi telah menjadi jauh lebih dalam dari yang Anda harapkan.
Adalah jauh lebih baik untuk menyingkirkan seluruh kepedulian untuk mempertahankan model Anda di suatu tempat, di mana semua seluk-beluk berurusan dengan basis data dan transaksi dan yang lainnya, dapat dengan mudah diabaikan oleh sisa aplikasi. Di sudut gelap terpencil itu, Anda dapat mengikat diri Anda sendiri pada detail implementasi spesifik jika Anda mau - itu tidak terlalu penting lagi.
sumber
Masalah dengan implementasi agnostisisme adalah bahwa Anda, pada waktu Anda sebagai pengembang, akan membuang waktu dengan cara apa pun.
Saya telah menulis beberapa proyek yang kami buang banyak waktu menulis ke antarmuka, yang kemudian tidak pernah digunakan dengan cara baru, tidak pernah dikonversi dan hanya digunakan 'apa adanya' selama bertahun-tahun
Saya juga menyia-nyiakan banyak waktu untuk mengonversi perangkat lunak yang tak seorang pun pernah berharap perlu dikonversi.
Satu-satunya pengamatan nyata yang harus saya lakukan, adalah bahwa yang pertama jauh lebih menyakitkan.
sumber