Saya telah bekerja dengan SpringMVC, Hibernate, dan beberapa database dalam contoh aplikasi web java.
Ada beberapa yang berbeda yang melakukan ini, tetapi tutorial integrasi Spring 3 dan hibernate dengan contoh ini memiliki kelas model, view (dalam jsp), dan kelas layanan dan dao untuk controller.
Pertanyaan saya adalah, bukankah kelas layanan dan DAO melakukan hal yang sama? Mengapa Anda membutuhkan keduanya?
Ini adalah tutorial yang sebenarnya saya gunakan: http://fruzenshtein.com/spring-mvc-security-mysql-hibernate/
Saya penulis posting yang bersangkutan. Saya mendapat bagian yang adil untuk mengerjakan berbagai teknologi dan arsitektur yang berbeda. Berdasarkan di atas, saya dapat dengan aman mengatakan bahwa memiliki lapisan layanan dan lapisan dao selalu merupakan ide yang baik. DAO harus dibatasi hanya untuk menambah / memperbarui / memasukkan / memilih objek Entitas ke / dari database dan itu saja. Jika Anda ingin melakukan sesuatu yang ekstra dalam hal logika, tambahkan ke lapisan layanan. Ini akan membantu dalam membuat kode modular dan mudah diganti ketika basis data diganti (untuk beberapa bagian data). Ini berlaku khusus dalam aplikasi yang melibatkan laporan yang memiliki logika berat bahkan setelah mengambil data dari database.
Selain itu, pada musim semi, keamanan diterapkan pada lapisan layanan idealnya. Anda tidak ingin mengubah cara ini.
sumber
Adam Bien menunjukkan dalam bukunya fakta bahwa EntityManager JPA adalah implementasi universal yang baik dari DAO:
http://realworldpatterns.com/
Di dunia Java EE hampir tidak pernah ada kebutuhan untuk menulis DAO Anda sendiri karena implementasi JPA menyertakannya. Anda hanya perlu menulis lapisan layanan.
Menerapkan lapisan DAO Anda sendiri adalah benar-benar mabuk dari arsitektur J2EE yang sangat buruk 15 tahun yang lalu, tetapi banyak orang masih merasa terdorong untuk melakukannya. Lapisan DAO kustom ini sering menyediakan tidak lebih dari fungsi penerusan yang memanggil metode yang sesuai pada EntityManager.
Jadi untuk menjawab pertanyaan Anda, ya Anda membutuhkan lapisan layanan dan DAO, tetapi Anda hanya perlu menulis lapisan layanan.
sumber
Saya biasanya memasukkan semua kode spesifik db (permintaan) dalam DAO dan penanganan transaksi serta logika bisnis dalam layanan. Hal ini memungkinkan metode layanan untuk memanggil metode di beberapa dao dan menyimpannya dalam transaksi yang sama. Menurut pendapat saya, ini memungkinkan untuk menggunakan kembali kode yang lebih baik di dao.
sumber
Saya telah menemukan bahwa lapisan layanan menambahkan kompleksitas yang tidak perlu dalam kebanyakan kasus. Secara teori adalah untuk menghindari memiliki logika bisnis di lapisan dao tetapi pada akhirnya ini hanya menyebabkan kebingungan, bahkan beberapa orang telah tidak digunakan untuk menghapus sepenuhnya lapisan dao karena mereka merasa itu tidak menambah nilai. http://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer
Tetapi jika Anda memiliki beberapa logika bisnis maka ya. Itu adalah ide yang bagus. Seberapa penting untuk membuat lapisan layanan?
sumber
IMHO lapisan Layanan dapat dianggap sebagai lapisan antara pengontrol dan lapisan DAO. Lapisan layanan ini persis di mana kita dapat menambahkan logika bisnis dan bahkan membuat objek kembali yang spesifik untuk apa yang perlu dirender oleh tampilan.
sumber