Saat melihat di luar cara RAD (drag-drop dan configure) cara membangun antarmuka pengguna yang banyak alat dorong Anda cenderung menemukan tiga pola desain yang disebut Model-View-Controller , Model-View-Presenter dan Model-View-ViewModel . Pertanyaan saya ada tiga bagian:
- Masalah apa yang ditangani oleh pola-pola ini?
- Bagaimana mereka serupa?
- Bagaimana mereka berbeda?
design-patterns
model-view-controller
user-interface
mvp
glossary
Mike Minutillo
sumber
sumber
Jawaban:
Model-View-Presenter
Di MVP , Presenter berisi logika bisnis UI untuk tampilan. Semua doa dari delegasi View langsung ke Presenter. Presenter juga dipisahkan secara langsung dari View dan berbicara kepadanya melalui antarmuka. Ini untuk memungkinkan mengejek Tampilan dalam unit test. Salah satu atribut umum dari MVP adalah harus ada banyak pengiriman dua arah. Misalnya, ketika seseorang mengklik tombol "Simpan", pengendali acara mendelegasikan ke metode "OnSave" Presenter. Setelah penyimpanan selesai, Presenter kemudian akan memanggil kembali tampilan melalui antarmuka sehingga tampilan dapat menampilkan bahwa penyimpanan telah selesai.
MVP cenderung menjadi pola yang sangat alami untuk mencapai presentasi terpisah dalam Formulir Web. Alasannya adalah bahwa tampilan selalu dibuat pertama kali oleh runtime ASP.NET. Anda dapat mengetahui lebih lanjut tentang kedua varian .
Dua variasi utama
Tampilan Pasif: Tampilan sebodoh mungkin dan berisi hampir nol logika. Presenter adalah orang tengah yang berbicara dengan View and the Model. Tampilan dan Model sepenuhnya terlindung dari satu sama lain. Model dapat memunculkan acara, tetapi Presenter berlangganan untuk memperbaharui View. Dalam Tampilan Pasif tidak ada pengikatan data langsung, sebagai gantinya Tampilan memperlihatkan properti setter yang digunakan Presenter untuk mengatur data. Semua status dikelola dalam Presenter dan bukan View.
Supervising Controller: Presenter menangani gerakan pengguna. Tampilan mengikat Model secara langsung melalui pengikatan data. Dalam hal ini adalah tugas Presenter untuk menyerahkan Model ke Tampilan sehingga dapat mengikatnya. Presenter juga akan berisi logika untuk gerakan seperti menekan tombol, navigasi, dll.
Model-View-Controller
Dalam MVC , Pengendali bertanggung jawab untuk menentukan Tampilan yang akan ditampilkan sebagai respons terhadap tindakan apa pun termasuk saat aplikasi dimuat. Ini berbeda dari MVP di mana tindakan merutekan melalui View ke Presenter. Di MVC, setiap tindakan di Tampilan berkorelasi dengan panggilan ke Pengontrol bersama dengan tindakan. Di web setiap tindakan melibatkan panggilan ke URL di sisi lain yang ada Pengendali yang merespons. Setelah Kontroler itu menyelesaikan pemrosesan, itu akan mengembalikan View yang benar. Urutan berlanjut seperti itu sepanjang umur aplikasi:
Satu perbedaan besar lainnya tentang MVC adalah bahwa View tidak secara langsung mengikat ke Model. Tampilannya sederhana, dan sepenuhnya stateless. Dalam implementasi MVC, View biasanya tidak memiliki logika dalam kode di belakang. Ini bertentangan dengan MVP di mana itu mutlak diperlukan karena, jika View tidak mendelegasikan ke Presenter, itu tidak akan pernah dipanggil.
Model Presentasi
Satu pola lain untuk dilihat adalah Model Presentasipola. Dalam pola ini tidak ada Presenter. Alih-alih, Tampilan mengikat langsung ke Model Presentasi. Model Presentasi adalah Model yang dibuat khusus untuk Tampilan. Ini berarti Model ini dapat mengekspos properti yang tidak akan pernah ditempatkan pada model domain karena itu akan menjadi pelanggaran pemisahan-masalah. Dalam hal ini, Model Presentasi mengikat ke model domain, dan dapat berlangganan acara yang berasal dari Model itu. View kemudian berlangganan ke acara yang berasal dari Model Presentasi dan memperbarui sendiri sesuai. Model Presentasi dapat mengekspos perintah yang digunakan tampilan untuk menjalankan tindakan. Keuntungan dari pendekatan ini adalah Anda pada dasarnya dapat menghapus kode-belakang sama sekali karena PM sepenuhnya merangkum semua perilaku untuk tampilan.Model-View-ViewModel .
Ada artikel MSDN tentang Model Presentasi dan bagian dalam Panduan Aplikasi Komposit untuk WPF (sebelumnya Prisma) tentang Pola Presentasi Terpisah
sumber
MVC
sering digunakan oleh kerangka kerja web sepertiLaravel
, di mana permintaan URL yang diterima (mungkin dibuat oleh pengguna) ditangani olehController
dan HTML yang dihasilkan olehView
dikirim ke klien - Jadi,View
ini adalah bagian dari backend dan pengguna tidak pernah dapat mengaksesnya secara langsung, dan jika Anda mengalami hal sebaliknya, anggap itu sebagai ekstensi-MVC (atau bahkan pelanggaran). @ Panzercrisis, Ini berbeda dariMVP
(seperti yang digunakan diAndroid
OS) di manaactions route through the View to the Presenter
dan pengguna memiliki akses langsung keView
.Ini adalah penyederhanaan berlebihan dari banyak varian dari pola desain ini, tetapi ini adalah bagaimana saya suka berpikir tentang perbedaan antara keduanya.
MVC
MVP
sumber
Saya blog tentang hal ini beberapa waktu lalu, mengutip postingan bagus Todd Snyder tentang perbedaan antara keduanya :
Ini adalah penjelasan terbaik di web yang bisa saya temukan.
sumber
Berikut adalah ilustrasi yang mewakili aliran komunikasi
sumber
MVP belum tentu merupakan skenario di mana View bertanggung jawab (lihat MVP Taligent misalnya).
Saya merasa sangat disayangkan bahwa orang-orang masih mengkhotbahkan ini sebagai sebuah pola (Lihat bertanggung jawab) sebagai lawan dari anti-pola karena bertentangan dengan "Itu hanya sebuah pandangan" (Pragmatic Programmer). "Ini hanya tampilan" menyatakan bahwa tampilan akhir yang ditampilkan kepada pengguna adalah perhatian kedua dari aplikasi. Pola MVP Microsoft membuat penggunaan kembali Tampilan jauh lebih sulit dan nyaman alasan desainer Microsoft mendorong praktik buruk.
Sejujurnya, saya pikir keprihatinan yang mendasari MVC berlaku untuk setiap implementasi MVP dan perbedaannya hampir seluruhnya semantik. Selama Anda mengikuti pemisahan kekhawatiran antara tampilan (yang menampilkan data), pengontrol (yang menginisialisasi dan mengontrol interaksi pengguna) dan model (data dan / atau layanan yang mendasarinya)) maka Anda mencapai manfaat MVC . Jika Anda mencapai manfaatnya, lalu siapa yang benar-benar peduli apakah pola Anda adalah MVC, MVP atau Pengawas Pengawas? Satu-satunya pola nyata tetap sebagai MVC, sisanya hanya rasa yang berbeda.
Pertimbangkan ini artikel yang sangat menarik yang komprehensif daftar sejumlah tersebut implementasi yang berbeda. Anda mungkin memperhatikan bahwa mereka semua pada dasarnya melakukan hal yang sama tetapi sedikit berbeda.
Saya pribadi berpikir MVP baru-baru ini diperkenalkan kembali sebagai istilah yang menarik untuk mengurangi argumen antara fanatik semantik yang berdebat apakah sesuatu benar-benar MVC atau tidak atau untuk membenarkan alat Pengembangan Aplikasi Cepat Microsoft. Tak satu pun dari alasan-alasan ini dalam buku-buku saya membenarkan keberadaannya sebagai pola desain yang terpisah.
sumber
MVP: tampilan ini bertanggung jawab.
Pandangan, dalam banyak kasus, menciptakan presenternya. Presenter akan berinteraksi dengan model dan memanipulasi tampilan melalui antarmuka. Pandangan kadang-kadang akan berinteraksi dengan presenter, biasanya melalui beberapa antarmuka. Ini adalah implementasi; apakah Anda ingin view memanggil metode pada presenter atau Anda ingin view memiliki acara yang didengarkan presenter? Intinya begini: Pandangan tahu tentang presenter. Tampilan mendelegasikan ke presenter.
MVC: controller bertanggung jawab.
Pengontrol dibuat atau diakses berdasarkan beberapa peristiwa / permintaan. Pengontrol kemudian membuat tampilan yang sesuai dan berinteraksi dengan model untuk lebih lanjut mengkonfigurasi tampilan. Itu bermuara pada: controller menciptakan dan mengelola tampilan; tampilan adalah slave ke controller. Pandangan tidak tahu tentang controller.
sumber
MVC (Pengendali Tampilan Model)
Input diarahkan pada Controller terlebih dahulu, bukan tampilan. Input itu mungkin berasal dari pengguna yang berinteraksi dengan halaman, tetapi bisa juga dengan memasukkan url tertentu ke browser. Dalam kedua kasus, ini adalah Controller yang dihubungkan dengan untuk memulai beberapa fungsi. Ada banyak-ke-satu hubungan antara Pengendali dan Tampilan. Itu karena pengontrol tunggal dapat memilih tampilan yang berbeda untuk diberikan berdasarkan operasi yang sedang dijalankan. Perhatikan panah satu arah dari Controller ke View. Ini karena View tidak memiliki pengetahuan atau referensi ke controller. Controller memang melewatkan kembali Model, jadi ada pengetahuan antara View dan Model yang diharapkan diteruskan ke dalamnya, tetapi tidak Controller yang menyajikannya.
MVP (Model View Presenter)
Input dimulai dengan View, bukan Presenter. Ada pemetaan satu-ke-satu antara View dan Presenter terkait. View memegang referensi ke Presenter. Presenter juga bereaksi terhadap peristiwa yang dipicu dari View, sehingga ia sadar akan View yang terkait dengannya. Presenter memperbarui Tampilan berdasarkan tindakan yang diminta yang dilakukan pada Model, tetapi Tampilan tidak sadar Model.
Untuk Referensi lebih lanjut
sumber
MVP
pola, ketika aplikasi memuat untuk pertama kalinya, bukankah presenter bertanggung jawab untuk memuat tampilan pertama? Seperti misalnya ketika kita memuat aplikasi facebook, bukankah presenter bertanggung jawab untuk memuat halaman login?Ada banyak jawaban untuk pertanyaan itu, tetapi saya merasa ada kebutuhan untuk beberapa jawaban yang sangat sederhana dengan jelas membandingkan keduanya. Inilah diskusi yang saya buat ketika pengguna mencari nama film di aplikasi MVP dan MVC:
Pengguna: Klik klik ...
Lihat : Siapa itu? [ MVP | MVC ]
Pengguna: Saya baru saja mengklik tombol pencarian ...
Lihat : Oke, tunggu sebentar ... [ MVP | MVC ]
( Lihat memanggil Presenter | Controller ...) [ MVP | MVC ]
Lihat : Hey Presenter | Kontroler , Pengguna baru saja mengklik tombol pencarian, apa yang harus saya lakukan? [ MVP | MVC ]
Presenter | Kontroler : Hai Lihat , apakah ada istilah pencarian di halaman itu? [ MVP | MVC ]
Melihat : Ya, ... ini dia ... "piano" [ MVP | MVC ]
Presenter : Terima kasih View ,… sementara itu saya mencari istilah pencarian pada Model , tolong tunjukkan padanya progress bar [ MVP | MVC ]
( Presenter | Controller memanggil Model ...) [ MVP | MVC ]
Presenter | Controller : Hey Model , Apakah Anda memiliki kecocokan untuk istilah pencarian ini ?: “piano” [ MVP | MVC ]
Model : Hey Presenter | Pengendali , izinkan saya memeriksa ... [ MVP | MVC ]
( Model membuat kueri ke basis data film ...) [ MVP | MVC ]
( Setelah beberapa saat ... )
-------------- Di sinilah MVP dan MVC mulai menyimpang ---------------
Model : Saya menemukan daftar untuk Anda, Presenter , ini dia di JSON “[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] ”[ MVP ]
Model : Ada beberapa hasil yang tersedia, Pengendali . Saya telah membuat variabel bidang dalam contoh saya dan mengisinya dengan hasilnya. Namanya adalah "searchResultsList" [ MVC ]
( Presenter | Controller terima kasih Model dan kembali ke View ) [ MVP | MVC ]
Presenter : Terima kasih telah menunggu Lihat , saya menemukan daftar hasil yang cocok untuk Anda dan mengaturnya dalam format yang rapi: ["Piano Teacher 2001", "Piano 1993"]. Tolong tunjukkan kepada pengguna dalam daftar vertikal. Juga tolong sembunyikan bilah progres sekarang [ MVP ]
Pengendali : Terima kasih telah menunggu Lihat , saya telah bertanya Model tentang permintaan pencarian Anda. Ia mengatakan telah menemukan daftar hasil yang cocok dan menyimpannya dalam variabel bernama "searchResultsList" di dalam instance-nya. Anda bisa mendapatkannya dari sana. Harap sembunyikan bilah progres sekarang [ MVC ]
Lihat : Terima kasih banyak Presenter [ MVP ]
Lihat : Terima kasih "Kontroler" [ MVC ] (Sekarang Tampilan mempertanyakan dirinya sendiri: Bagaimana saya harus menyajikan hasil yang saya dapatkan dari Model kepada pengguna? Haruskah tahun produksi film datang pertama atau terakhir ...? Haruskah berada dalam daftar vertikal atau horizontal? ...)
Jika Anda tertarik, saya telah menulis serangkaian artikel yang berhubungan dengan pola arsitektur aplikasi (MVC, MVP, MVVP, arsitektur bersih, ...) disertai dengan repo Github di sini . Meskipun sampel ditulis untuk android, prinsip-prinsip yang mendasarinya dapat diterapkan ke media apa pun.
sumber
MVC = Model-View-Controller
sumber
Model-View-Controller
MVC adalah pola untuk arsitektur aplikasi perangkat lunak. Ini memisahkan logika aplikasi menjadi tiga bagian yang terpisah, mempromosikan modularitas dan kemudahan kolaborasi dan penggunaan kembali. Ini juga membuat aplikasi lebih fleksibel dan ramah terhadap iterasi. Ini memisahkan aplikasi menjadi komponen-komponen berikut:
Untuk membuatnya lebih jelas, mari kita bayangkan aplikasi daftar belanja sederhana. Yang kami inginkan adalah daftar nama, jumlah, dan harga setiap barang yang perlu kami beli minggu ini. Di bawah ini kami akan menjelaskan bagaimana kami dapat mengimplementasikan beberapa fungsi ini menggunakan MVC.
Model-View-Presenter
Alur kerja yang konkret untuk menanyakan dan menampilkan daftar pengguna dari basis data dapat berfungsi seperti ini:
Pola MVC
Pengontrol didasarkan pada perilaku dan dapat dibagi lintas pandangan
Dapat bertanggung jawab untuk menentukan tampilan mana yang akan ditampilkan (Pola Pengontrol Depan)
Pola MVP
Tampilan lebih longgar digabungkan ke model. Presenter bertanggung jawab untuk mengikat model ke tampilan.
Lebih mudah untuk unit test karena interaksi dengan tampilan adalah melalui antarmuka
Biasanya melihat ke presenter peta satu ke satu. Tampilan kompleks mungkin memiliki banyak penyaji.
sumber
Juga patut diingat adalah bahwa ada berbagai jenis MVP juga. Fowler telah memecah pola menjadi dua - Tampilan Pasif dan Pengawas Pengawas.
Saat menggunakan Tampilan Pasif, Tampilan Anda biasanya menerapkan antarmuka berbutir halus dengan pemetaan properti lebih atau kurang langsung ke widget UI yang mendasari. Misalnya, Anda mungkin memiliki ICustomerView dengan properti seperti Nama dan Alamat.
Implementasi Anda mungkin terlihat seperti ini:
Kelas Presenter Anda akan berbicara dengan model dan "memetakan" ke tampilan. Pendekatan ini disebut "Pandangan Pasif". Keuntungannya adalah tampilan mudah untuk diuji, dan lebih mudah untuk berpindah antar platform UI (Web, Windows / XAML, dll.). Kerugiannya adalah Anda tidak dapat memanfaatkan hal-hal seperti penyatuan data (yang sangat kuat dalam kerangka kerja seperti WPF dan Silverlight ).
Rasa kedua dari MVP adalah Pengawas Pengawas. Dalam hal itu, View Anda mungkin memiliki properti yang disebut Pelanggan, yang sekali lagi adalah databound ke widget UI. Anda tidak harus berpikir tentang menyinkronkan dan mengelola mikro tampilan, dan Pengawas Pengawas dapat masuk dan membantu ketika diperlukan, misalnya dengan logika interaksi yang telah dibuat.
"Rasa" MVP ketiga (atau seseorang mungkin menyebutnya pola yang terpisah) adalah Model Presentasi (atau kadang-kadang disebut Model-View-ViewModel). Dibandingkan dengan MVP Anda "menggabungkan" M dan P menjadi satu kelas. Anda memiliki objek pelanggan yang terikat dengan widget UI, tetapi Anda juga memiliki bidang khusus UI tambahan seperti "IsButtonEnabled", atau "IsReadOnly", dll.
Saya pikir sumber daya terbaik yang saya temukan untuk arsitektur UI adalah serangkaian posting blog yang dilakukan oleh Jeremy Miller di The Build Your Own CAB Series Daftar Isi . Dia membahas semua rasa MVP dan menunjukkan kode C # untuk mengimplementasikannya.
Saya juga telah membuat blog tentang pola Model-View-ViewModel dalam konteks Silverlight di YouCard Re-visited: Menerapkan pola ViewModel .
sumber
Mereka masing-masing mengatasi masalah yang berbeda dan bahkan dapat digabungkan bersama untuk memiliki sesuatu seperti di bawah ini
Ada juga perbandingan lengkap MVC, MVP dan MVVM di sini
sumber
Kedua kerangka kerja ini bertujuan untuk memisahkan masalah - misalnya, interaksi dengan sumber data (model), logika aplikasi (atau mengubah data ini menjadi informasi yang bermanfaat) (Kontroler / Presenter) dan kode tampilan (Tampilan). Dalam beberapa kasus model juga dapat digunakan untuk mengubah sumber data menjadi abstraksi tingkat yang lebih tinggi juga. Contoh yang baik dari ini adalah proyek MVC Storefront .
Ada diskusi di sini mengenai perbedaan antara MVC vs MVP.
Perbedaan yang dibuat adalah bahwa dalam aplikasi MVC secara tradisional memiliki pandangan dan pengontrol berinteraksi dengan model, tetapi tidak satu sama lain.
Desain MVP membuat Presenter mengakses model dan berinteraksi dengan tampilan.
Karena itu, ASP.NET MVC dengan definisi ini kerangka kerja MVP karena Pengendali mengakses Model untuk mengisi Lihat yang dimaksudkan untuk tidak memiliki logika (hanya menampilkan variabel yang disediakan oleh Pengendali).
Untuk mungkin mendapatkan gambaran tentang perbedaan ASP.NET MVC dari MVP, lihat presentasi MIX ini oleh Scott Hanselman.
sumber
Keduanya adalah pola yang berusaha memisahkan presentasi dan logika bisnis, memisahkan logika bisnis dari aspek UI
Secara arsitektur, MVP adalah pendekatan berbasis Halaman Controller di mana MVC adalah pendekatan berbasis Front Controller. Itu berarti bahwa dalam siklus hidup halaman bentuk web standar MVP hanya ditingkatkan dengan mengekstraksi logika bisnis dari kode di belakang. Dengan kata lain, halaman adalah satu-satunya permintaan layanan http. Dengan kata lain, MVP IMHO adalah jenis peningkatan bentuk evolusi web. MVC di sisi lain sepenuhnya mengubah permainan karena permintaan akan dicegat oleh kelas pengontrol sebelum halaman dimuat, logika bisnis dijalankan di sana dan kemudian pada hasil akhir pengontrol memproses data yang baru saja dibuang ke halaman ("view"). akal, MVC terlihat (setidaknya bagi saya) banyak rasa Pengawas Pengawasan MVP ditingkatkan dengan mesin routing
Keduanya memungkinkan TDD dan memiliki kelemahan dan kelebihan.
Keputusan tentang bagaimana memilih salah satu dari mereka IMHO harus didasarkan pada berapa banyak waktu yang diinvestasikan dalam jenis web ASP bentuk pengembangan web. Jika seseorang menganggap dirinya bagus dalam bentuk web, saya sarankan MVP. Jika seseorang merasa tidak begitu nyaman dalam hal-hal seperti siklus hidup halaman, dll. MVC bisa menjadi cara untuk pergi ke sini.
Berikut ini lagi tautan posting blog yang memberikan sedikit detail tentang topik ini
http://blog.vuscode.com/malovicn/archive/2007/12/18/model-view-presenter-mvp-vs-model-view-controller-mvc.aspx
sumber
Saya telah menggunakan MVP dan MVC dan meskipun kami sebagai pengembang cenderung fokus pada perbedaan teknis kedua pola, titik untuk MVP di IMHO jauh lebih terkait dengan kemudahan adopsi daripada hal lainnya.
Jika saya bekerja di tim yang sudah memiliki latar belakang yang baik tentang gaya pengembangan bentuk web, jauh lebih mudah untuk memperkenalkan MVP daripada MVC. Saya akan mengatakan bahwa MVP dalam skenario ini adalah kemenangan cepat.
Pengalaman saya memberi tahu saya bahwa memindahkan tim dari formulir web ke MVP dan kemudian dari MVP ke MVC relatif mudah; pindah dari formulir web ke MVC lebih sulit.
Saya meninggalkan di sini tautan ke serangkaian artikel yang telah diterbitkan teman saya tentang MVP dan MVC.
http://www.qsoft.be/post/Building-the-MVP-StoreFront-Gutthrie-style.aspx
sumber
Dalam MVP tampilan menarik data dari presenter yang menggambar dan menyiapkan / menormalkan data dari model sementara di MVC pengontrol mengambil data dari model dan mengatur, dengan menekan tampilan.
Di MVP Anda dapat memiliki satu tampilan yang bekerja dengan beberapa jenis presenter dan satu presenter yang bekerja dengan beberapa tampilan berbeda.
MVP biasanya menggunakan semacam kerangka kerja mengikat, seperti kerangka kerja mengikat Microsoft WPF atau berbagai kerangka kerja mengikat untuk HTML5 dan Java.
Dalam kerangka tersebut, UI / HTML5 / XAML, mengetahui properti apa yang ditampilkan oleh presenter yang ditampilkan oleh setiap elemen UI, jadi ketika Anda mengikat tampilan ke presenter, tampilan mencari properti dan tahu cara menggambar data dari mereka dan bagaimana untuk mengatur mereka ketika nilai diubah di UI oleh pengguna.
Jadi, jika misalnya, modelnya adalah mobil, maka presenter adalah semacam presenter mobil, memperlihatkan sifat-sifat mobil (tahun, pembuat, tempat duduk, dll.) Ke tampilan. Pandangan tahu bahwa bidang teks yang disebut 'pembuat mobil' perlu menampilkan properti pembuat presenter.
Anda kemudian dapat mengikat pandangan berbagai jenis presenter, semua harus memiliki properti Maker - bisa dari pesawat, kereta api atau apa pun, pemandangan tidak peduli. Tampilan menarik data dari presenter - tidak peduli yang mana - asalkan mengimplementasikan antarmuka yang disepakati.
Kerangka kerja yang mengikat ini, jika Anda melepasnya, itu sebenarnya controller :-)
Jadi, Anda dapat melihat MVP sebagai evolusi MVC.
MVC memang bagus, tetapi masalahnya adalah biasanya controller-nya per view. Controller A tahu cara mengatur bidang View A. Jika sekarang, Anda ingin View A untuk menampilkan data model B, Anda perlu Controller A untuk mengetahui model B, atau Anda perlu Controller A untuk menerima objek dengan antarmuka - yang seperti MVP hanya tanpa binding, atau Anda perlu menulis ulang kode set UI di Controller B.
Kesimpulan - MVP dan MVC keduanya decouple dari pola UI, tetapi MVP biasanya menggunakan kerangka binding yang merupakan MVC di bawahnya. MVP INI berada pada tingkat arsitektur yang lebih tinggi daripada MVC dan pola pembungkus di atas MVC.
sumber
Pandangan singkat saya yang sederhana: MVP adalah untuk skala besar, dan MVC untuk skala kecil. Dengan MVC, kadang-kadang saya merasa V dan C dapat dilihat sebagai dua sisi dari satu komponen yang tidak dapat dipisahkan yang secara langsung terikat pada M, dan satu yang pasti jatuh ke ini ketika turun ke skala yang lebih pendek, seperti kontrol UI dan widget dasar. Pada tingkat granularitas ini, MVP tidak masuk akal. Ketika seseorang sebaliknya pergi ke skala yang lebih besar, antarmuka yang tepat menjadi lebih penting, sama dengan penugasan tanggung jawab yang jelas, dan inilah MVP.
Di sisi lain, aturan skala praktis ini, mungkin berbobot sangat kecil ketika karakteristik platform lebih menyukai semacam hubungan antara komponen, seperti dengan web, di mana tampaknya lebih mudah untuk mengimplementasikan MVC, lebih dari MVP.
sumber
Saya pikir gambar ini oleh Erwin Vandervalk (dan artikel yang menyertainya ) adalah penjelasan terbaik tentang MVC, MVP, dan MVVM, kesamaan mereka, dan perbedaan mereka. The Artikel tidak muncul dalam hasil mesin pencari untuk query pada "MVC, MVP, dan MVVM" karena judul artikel tidak mengandung kata-kata "MVC" dan "MVP"; tapi itu penjelasan terbaik, saya pikir.
( Artikel ini juga cocok dengan apa yang dikatakan Paman Bob Martin dalam salah satu ceramahnya: bahwa MVC pada awalnya dirancang untuk komponen UI kecil, bukan untuk arsitektur sistem)
sumber
Ada banyak versi MVC, jawaban ini adalah tentang MVC asli di Smalltalk. Singkatnya, itu
Pembicaraan ini droidcon NYC 2017 - Desain aplikasi bersih dengan Komponen Arsitektur mengklarifikasi itu
sumber
UIKit
Ada ini video yang bagus dari Paman Bob di mana ia menjelaskan secara singkat MVC & MVP di akhir.
IMO, MVP adalah versi perbaikan MVC di mana Anda pada dasarnya memisahkan kekhawatiran tentang apa yang akan Anda tunjukkan (data) dari bagaimana Anda akan menunjukkan (tampilan). Presenter menyertakan sedikit logika bisnis UI Anda, secara implisit memaksakan data apa yang harus disajikan dan memberi Anda daftar model tampilan bodoh. Dan ketika tiba saatnya untuk menunjukkan data, Anda cukup mencolokkan tampilan Anda (mungkin termasuk id yang sama) ke adaptor Anda dan mengatur bidang tampilan yang relevan menggunakan model tampilan tersebut dengan jumlah minimum kode yang diperkenalkan (hanya menggunakan setter). Manfaat utamanya adalah Anda dapat menguji logika bisnis UI Anda terhadap banyak / berbagai tampilan seperti menampilkan item dalam daftar horizontal atau daftar vertikal.
Dalam MVC, kita berbicara melalui antarmuka (batas) untuk merekatkan lapisan yang berbeda. Pengontrol adalah plug-in untuk arsitektur kita tetapi tidak memiliki batasan untuk memaksakan apa yang ditampilkan. Dalam pengertian itu, MVP adalah sejenis MVC dengan konsep pandangan yang dapat dipasang ke controller melalui adaptor.
Saya harap ini membantu lebih baik.
sumber
Anda lupa tentang Action-Domain-Responder ( ADR ).
Sebagaimana dijelaskan dalam beberapa gambar di atas, ada hubungan / tautan langsung antara Model dan Tampilan di MVC. Suatu tindakan dilakukan pada Controller , yang akan mengeksekusi aksi pada Model . Tindakan itu dalam Model , akan memicu reaksi dalam Tampilan . The View , selalu diperbarui ketika Model perubahan negara.
Beberapa orang terus lupa, bahwa MVC diciptakan pada akhir 70 " , dan bahwa Web hanya dibuat pada akhir 80" / awal 90 ". MVC pada awalnya tidak dibuat untuk Web, tetapi untuk aplikasi Desktop, di mana Pengontrol , Model dan View akan hidup berdampingan bersama.
Karena kami menggunakan kerangka kerja web ( mis .: Laravel ) yang masih menggunakan konvensi penamaan yang sama ( model-view-controller ), kami cenderung berpikir bahwa itu pasti MVC, tetapi sebenarnya ini adalah sesuatu yang lain.
Sebaliknya, lihat Action-Domain-Responder . Dalam ADR, Pengendali mendapat Tindakan , yang akan melakukan operasi di Model / Domain . Sejauh ini, sama saja. Perbedaannya adalah, ia kemudian mengumpulkan respons / data operasi itu, dan meneruskannya ke Responder ( misalnya :.
view()
) untuk rendering. Ketika tindakan baru diminta pada komponen yang sama, Pengontrol dipanggil lagi, dan siklus berulang. Di ADR, tidak ada koneksi antara Model / Domain dan View ( Tanggapan Reponser ).Catatan: Wikipedia menyatakan bahwa " Setiap tindakan ADR, bagaimanapun, diwakili oleh kelas atau penutupan yang terpisah. ". Ini belum tentu benar. Beberapa Tindakan bisa di Kontroler yang sama, dan polanya masih sama.
mvc adr model-view-controller action-domain-responder
sumber
Jawaban paling sederhana adalah bagaimana tampilan berinteraksi dengan model. Dalam MVP tampilan diperbarui oleh presenter, yang bertindak sebagai perantara antara tampilan dan model. Presenter mengambil input dari tampilan, yang mengambil data dari model dan kemudian melakukan logika bisnis apa pun yang diperlukan dan kemudian memperbarui tampilan. Dalam MVC model memperbarui tampilan secara langsung daripada kembali melalui pengontrol.
sumber
sumber
MVP
MVP adalah singkatan dari Model - View- Presenter. Ini muncul pada gambar di awal 2007 di mana Microsoft memperkenalkan aplikasi Smart Client windows.
Presenter bertindak sebagai peran pengawas di MVP yang mengikat Lihat acara dan logika bisnis dari model.
Penjilidan acara lihat akan diterapkan di Presenter dari antarmuka tampilan.
Tampilan adalah inisiator untuk input pengguna dan kemudian mendelegasikan acara ke Presenter dan presenter menangani binding acara dan mendapatkan data dari model.
Kelebihan: Tampilan hanya memiliki UI dan tidak ada logika
Cons: Agak rumit dan lebih banyak pekerjaan ketika menerapkan binding acara
MVC
MVC adalah singkatan dari Model-View-Controller. Pengontrol bertanggung jawab untuk membuat model dan menampilkan tampilan dengan model yang mengikat.
Kontroler adalah penggagas dan memutuskan pandangan mana yang akan ditampilkan.
Kelebihan: Penekanan pada Prinsip Tanggung Jawab Tunggal Tingkat testabilitas yang tinggi
Cons: Terkadang terlalu banyak beban kerja untuk Controllers, jika mencoba merender banyak view dalam controller yang sama.
sumber