Saya bekerja dengan ASP.NET MVC (dan implementasi MVC berbasis web lainnya) cukup sering, tetapi ini adalah sesuatu yang saya tidak pernah yakin: Haruskah controller dan view berkomunikasi?
Tentu saja controller harus memilih tampilan mana yang akan digunakan, tetapi apa yang saya maksud adalah apakah controller harus meneruskan data ke view? Menurut pendapat saya, jika tampilan mengharapkan data dari controller, maka mereka secara efektif diikat bersama sebagai pasangan (controller, view). Sebagai gantinya, saya biasanya memiliki pandangan berkomunikasi dengan model itu sendiri dan independen dari pengontrol apa pun.
Apakah saya memiliki pendekatan yang tepat, atau ini tidak ada jawaban yang benar? Apakah jawabannya berubah ketika bekerja di web versus lingkungan lain? Apakah jawabannya berubah ketika Anda memiliki konsep tampilan yang sangat diketik (seperti di ASP.NET MVC) atau tidak?
sumber
Jawaban:
Pengontrol menyiapkan data yang selanjutnya akan diteruskan ke tampilan untuk ditampilkan / ditampilkan. Ini juga menerima data input pengguna melalui mekanisme publish-subscribe atau serupa. Lihatlah diagram pertama di Wikipedia atau situs web Martin Fowler untuk informasi lebih lanjut tentang MVC.
Sementara pandangan umumnya menerima data, dalam sebagian besar kerangka kerja MVC, itu tidak tergantung pada pengontrol tertentu. Pengecualian, misalnya, keluarga JavaServer Faces. Secara umum, kerangka kerja seperti Rails, Django atau Spring MVC memungkinkan Anda untuk memisahkan pandangan dari pengontrol dengan mengirimkan data (konteks, umumnya peta / kamus / tas) ke tampilan (di mana tampilan adalah implementasi dari pola tampilan template ).
Apakah atau tidak bahasa pemrograman Anda diketik dengan kuat tidak mempengaruhi cara Anda mengatur aplikasi Anda.
sumber
Pertanyaan yang Anda ajukan dibahas di tim saya dari waktu ke waktu. Kami berdebat tentang dua pendekatan, yang keduanya memiliki kontra dan pro.
Yang pertama, berpendapat bahwa pengontrol dapat memperbarui tampilan dengan pola berikut. Ini mendengarkan GUI dan model acara. Ketika peristiwa GUI terjadi, ia mengeksekusi tindakan yang diperlukan dalam model, yang pada gilirannya memicu dan peristiwa. Sekarang controller biasanya memperbarui tampilan dengan data yang diperlukan.
Pendekatan kedua, berpendapat bahwa pandangan itu sendiri adalah mendengarkan peristiwa model dan memperbarui dirinya dengan data yang melekat pada acara atau dengan menanyakan model.
Pada pendekatan pertama Anda memiliki lebih banyak kekuatan untuk controller yang benar-benar mengendalikan semua yang terjadi pada aplikasi Anda. Kekuatan untuk memutuskan dengan cara mana pandangan harus diperbarui sesuai dengan peristiwa apa yang ada di tangannya dan dengan cara ini Anda menjaga pandangan Anda murni. Namun, seperti yang Anda katakan, dengan cara ini Anda memiliki pandangan dan pengontrol yang digabungkan.
Pada detik Anda memisahkan mereka tetapi pandangan Anda sebenarnya mengendalikan dirinya dalam beberapa cara.
sumber