Masalahnya MVC
adalah bahwa orang berpikir pandangan, pengontrol, dan model harus se independen mungkin dari satu sama lain. Mereka tidak - pandangan dan pengontrol sering terjalin - menganggapnya sebagai M(VC)
.
Kontroler adalah mekanisme input antarmuka pengguna, yang sering terjerat dalam tampilan, terutama dengan GUI. Meskipun demikian, view adalah output dan controller adalah input. Suatu tampilan seringkali dapat bekerja tanpa pengontrol yang sesuai, tetapi sebuah pengontrol biasanya jauh lebih tidak berguna tanpa suatu penglihatan. Pengontrol yang ramah pengguna menggunakan tampilan untuk menafsirkan input pengguna dengan cara yang lebih bermakna, intuitif. Inilah yang membuatnya sulit memisahkan konsep pengontrol dari tampilan.
Pikirkan robot yang dikendalikan radio pada bidang deteksi dalam kotak tertutup sebagai model.
Modelnya adalah semua tentang transisi keadaan dan keadaan tanpa konsep keluaran (tampilan) atau apa yang memicu transisi keadaan. Saya bisa mendapatkan posisi robot di lapangan dan robot itu tahu bagaimana melakukan transisi posisi (mengambil langkah maju / mundur / kiri / kanan. Mudah untuk membayangkan tanpa tampilan atau pengontrol, tetapi tidak ada gunanya
Pikirkan sebuah tampilan tanpa pengontrol, mis. Seseorang di ruangan lain di jaringan di ruangan lain mengawasi posisi robot sebagai (x, y) koordinat yang mengalir di konsol gulir. Pandangan ini hanya menampilkan keadaan model, tetapi orang ini tidak memiliki pengontrol. Sekali lagi, mudah untuk membayangkan tampilan ini tanpa pengontrol.
Pikirkan pengontrol tanpa melihat, misalnya seseorang terkunci di lemari dengan pengontrol radio disetel ke frekuensi robot. Pengontrol ini mengirimkan input dan menyebabkan transisi status tanpa tahu apa yang mereka lakukan pada model (jika ada). Mudah dibayangkan, tetapi tidak terlalu berguna tanpa semacam umpan balik dari tampilan.
Sebagian besar UI yang ramah pengguna mengoordinasikan tampilan dengan pengontrol untuk menyediakan antarmuka pengguna yang lebih intuitif. Misalnya, bayangkan tampilan / pengontrol dengan layar sentuh yang menunjukkan posisi robot saat ini dalam 2-D dan memungkinkan pengguna untuk menyentuh titik di layar yang kebetulan berada di depan robot. Pengontrol membutuhkan detail tentang tampilan, misalnya posisi dan skala viewport, dan posisi piksel tempat yang disentuh relatif terhadap posisi piksel robot di layar) untuk menafsirkan ini dengan benar (tidak seperti orang yang terkunci di dalam lemari dengan pengontrol radio).
Sudahkah saya menjawab pertanyaan Anda? :-)
Pengontrol adalah segala sesuatu yang mengambil input dari pengguna yang digunakan untuk menyebabkan model ke keadaan transisi. Cobalah untuk menjaga pandangan dan pengontrol tetap terpisah, tetapi sadari bahwa mereka sering saling bergantung satu sama lain, jadi tidak apa-apa jika batas di antara keduanya tidak jelas, yaitu memiliki tampilan dan pengontrol sebagai paket terpisah mungkin tidak sebersih yang Anda inginkan. suka, tapi tidak apa-apa. Anda mungkin harus menerima bahwa pengontrol tidak akan dipisahkan dengan jelas dari tampilan karena tampilan dari model.
... haruskah validasi dll dilakukan di Controller? Jika demikian, bagaimana cara saya memberi umpan balik pesan kesalahan kembali ke Tampilan - haruskah itu melalui Model lagi, atau haruskah Pengontrol langsung mengirimkannya kembali ke Lihat?
Jika validasi dilakukan di View, apa yang harus saya tempatkan di Controller?
Saya mengatakan bahwa view dan controller yang terhubung harus berinteraksi secara bebas tanpa melalui model. Kontroler mengambil input pengguna dan harus melakukan validasi (mungkin menggunakan informasi dari model dan / atau tampilan), tetapi jika validasi gagal, controller harus dapat memperbarui tampilan terkait secara langsung (misalnya pesan kesalahan).
Tes asam untuk ini adalah dengan bertanya pada diri sendiri apakah pandangan independen (yaitu pria di ruangan lain mengawasi posisi robot melalui jaringan) harus melihat sesuatu atau tidak sebagai akibat dari kesalahan validasi orang lain (misalnya pria di lemari mencoba memberitahu robot untuk turun lapangan). Secara umum, jawabannya adalah tidak - kesalahan validasi mencegah transisi keadaan. Jika tidak ada keadaan transisi (robot tidak bergerak), tidak perlu memberi tahu pandangan lain. Lelaki di lemari hanya tidak mendapatkan umpan balik bahwa ia mencoba menyebabkan transisi ilegal (tanpa tampilan - antarmuka pengguna yang buruk), dan tidak ada orang lain yang perlu mengetahuinya.
Jika pria dengan layar sentuh mencoba mengirim robot keluar lapangan, dia mendapat pesan ramah pengguna yang meminta agar dia tidak membunuh robot dengan mengirimkannya dari bidang deteksi, tetapi sekali lagi, tidak ada orang lain yang perlu mengetahui hal ini.
Jika pandangan lain memang perlu tahu tentang kesalahan ini, maka Anda secara efektif mengatakan bahwa input dari pengguna dan kesalahan yang dihasilkan adalah bagian dari model dan semuanya sedikit lebih rumit ...