Saya telah melihat berbagai argumen terhadap DAO yang dipanggil dari kelas Controller secara langsung dan juga DAO dari kelas Model. Infact Saya pribadi merasa bahwa jika kita mengikuti pola MVC, controller tidak boleh digabungkan dengan DAO, tetapi kelas Model harus memanggil DAO dari dalam dan pengontrol harus memanggil kelas model. Mengapa, kita dapat memisahkan kelas model dari aplikasi web dan mengekspos fungsi untuk berbagai cara seperti untuk layanan REST untuk menggunakan kelas model kita.
Jika kita menulis permintaan DAO di controller, itu tidak mungkin untuk layanan REST untuk menggunakan kembali fungsi kan? Saya telah merangkum kedua pendekatan di bawah ini.
Pendekatan # 1
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
new CustomerDAO().save(customer);
}
}
Pendekatan # 2
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
customer.save(customer);
}
}
public class Customer {
...........
private void save(Customer customer){
new CustomerDAO().save(customer);
}
}
Catatan -
Berikut adalah definisi Model:
Model: Model mengelola perilaku dan data domain aplikasi, merespons permintaan informasi tentang statusnya (biasanya dari tampilan), dan merespons instruksi untuk mengubah status (biasanya dari pengontrol).
Dalam sistem yang digerakkan oleh peristiwa, model memberi tahu pengamat (biasanya melihat) ketika informasi berubah sehingga mereka dapat bereaksi.
Saya perlu pendapat ahli tentang ini karena saya menemukan banyak menggunakan # 1 atau # 2, Jadi yang mana?
Jawaban:
Menurut pendapat saya, Anda harus membedakan antara pola MVC dan arsitektur 3-tier. Untuk menyimpulkan:
Arsitektur 3 tingkat:
Pola MVC terjadi di tingkat presentasi arsitektur di atas (untuk webapp):
Siklus hidup permintaan HTTP khas :
sumber
Dari lapisan model.
Untuk lebih tepatnya: dari layanan, yang terkandung dalam lapisan model , karena mereka mengatur interaksi antara objek domain dan abstraksi logika penyimpanan.
Pengontrol hanya bertanggung jawab untuk mengubah keadaan lapisan model. DAO adalah bagian dari mekanisme ketekunan. Ini merupakan bagian dari domain bisnis dan logika aplikasi. Jika Anda mulai berinteraksi dengan DAO di controller, Anda akan membocorkan logika domain di lapisan presentasi .
sumber
Saya tidak yakin apa pola panggilan MVC resmi, tapi saya biasanya suka memiliki lapisan "layanan" di antara pengontrol dan DAO. Pengontrol menarik data dari permintaan dan meneruskannya ke kelas layanan yang sesuai. Kelas layanan bertanggung jawab untuk memanggil satu atau lebih DAO yang lulus kelas model. Kelas-kelas model tersebut kemudian dikirim kembali ke controller untuk dikirim ke lapisan tampilan. Memasukkan lapisan layanan membantu dengan menggunakan kembali karena beberapa pengendali dapat menggunakan metode lapisan layanan yang sama.
sumber