Saya baru-baru ini belajar tentang pola desain MVC. Saya belajar dari buku Pola Desain Kepala Pertama.
Menurut buku ini (jika saya mengerti dengan benar):
Model adalah sebagian besar logika aplikasi dan data.
Tampilan pada dasarnya adalah GUI yang mewakili Model secara visual kepada pengguna.
Pengendali bertanggung jawab untuk 'menengahi', dan bertindak sebagai 'perantara' antara Tampilan dan Model. Lihat melaporkan ke Pengendali bahwa pengguna membuat tindakan, dan Pengendali menerjemahkannya ke panggilan metode pada Model.
Namun, banyak tempat di web bertentangan dengan apa yang saya pahami dari buku itu. Mereka mengklaim bahwa umumnya pengguna berinteraksi dengan Controller, bukan View.
Mana yang benar atau lebih umum? Apakah pengguna berinteraksi dengan Controller secara langsung, atau dengan View secara langsung? Apakah kedua pendekatan tersebut dapat diterima? Mana yang lebih umum?
sumber
Jawaban:
Pengguna berinteraksi dengan View , tetapi View harus mengkomunikasikan tindakan ke Controller . The Pengendali dapat memperbarui Model , tetapi tidak diperlukan dengan setiap / perubahan.
Deskripsi yang saya berikan didasarkan pada pengalaman pribadi saya dengan implementasi .NET dari MVC. Implementasi Anda bisa berbeda.
The Pengendali adalah di mana tindakan diproses, pada dasarnya lapisan bisnis. Pengontrol sederhana tidak akan melakukan apa pun selain mendapatkan data dari Model untuk dimasukkan ke View. Pengendali yang rumit akan melakukan segala macam tindakan, hingga manajemen keamanan, otentikasi, otorisasi, pendaftaran, dan mungkin banyak hal lainnya.
The View seharusnya hanya bertanggung jawab untuk menampilkan informasi dengan cara yang pengguna dapat mengerti. Mungkin ada beberapa silang di sini dengan Controller dan Model karena hal-hal seperti Aplikasi Halaman Tunggal (SPA) akan memiliki umpan balik validasi data untuk pengguna. Semua cross over sangat disukai.
The Model berhubungan dengan data. Ini termasuk validasi data (jika ada). Penyimpanan dan pengambilan data juga ditangani di lapisan ini.
MEMPERBARUI
Tampaknya ada beberapa kebingungan di sekitar siapa melakukan apa kapan. Saya menyertakan dua ikhtisar berbeda dari arsitektur MVC karena mereka mirip, tetapi tidak sama. Ada ruang untuk kedua interpretasi. Mungkin, masih banyak lagi. Deskripsi di atas adalah interpretasi saya terhadap MVC dari berbagai sumber, termasuk pengalaman saya sendiri membangun aplikasi menggunakan metodologi ini. Semoga pembaruan ini akan membantu menjernihkan beberapa kebingungan ini.
MVC adalah upaya untuk membangun pola desain Pemisahan Kekhawatiran untuk pengembangan perangkat lunak. Ini terutama telah diterapkan dalam aplikasi berbasis web (setahu saya).
The View menangani semua interaksi pengguna. Jika pengguna mengklik tombol, tampilan menentukan apakah klik itu adalah interaksi antarmuka pengguna atau sesuatu yang berada di luar masalah (interaksi Pengontrol). Jika tombol melakukan sesuatu seperti menyalin nilai dari satu bidang ke bidang lain, implementasi Anda akan menentukan apakah itu masalah tampilan atau masalah pengontrol. Kemungkinan besar Anda hanya akan memiliki kekuatiran yang kabur ini ketika berhadapan dengan Aplikasi Halaman Tunggal (SPA).
The Pengendali adalah di mana tindakan Anda diproses. Tampilan telah mengkomunikasikan pengguna memutuskan untuk mengubah nilai untuk beberapa bidang. Pengontrol dapat melakukan validasi pada data tersebut atau dapat ditangani oleh Model. Sekali lagi ini tergantung pada implementasi. Jika Controller memiliki fitur keamanan, itu mungkin menentukan bahwa pengguna tidak memiliki hak yang cukup untuk melakukan tindakan. Itu akan menolak perubahan dan memperbarui tampilan yang sesuai. Pengontrol juga menentukan data apa yang akan diambil dari Model, cara mengemasnya, dan memperbarui Tampilan dengan data itu.
The Model menentukan bagaimana dan di mana untuk menyimpan data. Mungkin juga melakukan validasi data itu sebelum menyimpannya (itu harus dilakukan karena orang akan mem-bypass View pada kesempatan).
Wikipedia memiliki artikel tentang MVC .
Dari Ikhtisar Microsoft tentang MVC .
sumber
url-routes
, ditempatkan diController
. Maksud saya sama sekali tidak Lihat ...Pengguna berinteraksi dengan Controller . Dari sudut pandang teknis Anda tidak berinteraksi dengan View , Anda hanya menggunakannya untuk berinteraksi dengan Controller .
Pada permukaan tampaknya pengguna berinteraksi dengan GUI - juga untuk non-programmer ini lebih masuk akal, namun dengan mengklik tombol Anda pada dasarnya berbicara dengan Controller bukan View .
Juga tidak semua aplikasi - bahkan aplikasi web MVC, memang memiliki GUI. Anda dapat berinteraksi dengan Controller melalui API -
url-routes
contohnya sederhana saja , ditempatkan di Controller itu sendiri.The Pengendali harus menjadi tempat yang Menerima dan Menangani permintaan pengguna. Jadi jika Anda entah bagaimana mengakses Model langsung dari View - tidak masalah bagaimana, maka itu bukan MVC lagi.
sumber
Mari kita gunakan contoh konkret mengapa pengguna berinteraksi langsung dengan tampilan dan bukan pengontrol.
Di aplikasi musik di iPhone, fitur tingkat tinggi adalah memainkan daftar putar. "Play a playlist" adalah fungsi pengontrol untuk aplikasi.
Ada lebih dari satu cara untuk mengaktifkan fungsi itu. Saya dapat mengklik daftar putar di dalam aplikasi, atau saya dapat meminta Siri (antarmuka suara) untuk melakukan fungsi yang sama. Itu adalah dua gerakan berbeda yang dikenali oleh berbagai pandangan.
Umpan balik di setiap tampilan juga berbeda. Siri akan memberi tahu Anda bahwa itu memainkan musik yang Anda minta. Aplikasi musik akan menunjukkan kepada Anda umpan balik visual bahwa ia sedang memainkan daftar putar.
sumber