Haruskah pengontrol melewatkan data ke tampilan dalam pola MVC?

11

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?

Andy Hunt
sumber
Inilah yang menjadi "M" dalam "MVC" untuk - Model - yang mewakili data yang dikirimkan dari Controller ke View.
Jay Sullivan

Jawaban:

7

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.

jika tampilan mengharapkan data dari controller, maka mereka secara efektif diikat bersama sebagai pasangan (controller, view).

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 jawabannya berubah ketika Anda memiliki konsep tampilan yang sangat diketik (seperti di ASP.NET MVC) atau tidak?

Apakah atau tidak bahasa pemrograman Anda diketik dengan kuat tidak mempengaruhi cara Anda mengatur aplikasi Anda.

BenR
sumber
Jenis data apa yang sedang dipersiapkan dan diteruskan? Ambil contoh sederhana: menunjukkan artikel dengan ID itu. Apakah ID yang dilewatkan setelah verifikasi (mungkin tidak mengarah ke artikel), atau apakah controller mendapatkan artikel dari database dan meneruskannya?
Andy Hunt
Jika Anda hanya memberikan ID, apakah pandangan Anda tidak lebih berfungsi daripada rendering? Itu harus mengambil data yang mungkin tidak dalam semangat pola.
Rig
1

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.

Assimiz
sumber