Apa perbedaan antara pola desain MVC, MVP & MVVM dalam hal pengkodean c #


202

Jika kita mencari Google menggunakan frasa "Apa perbedaan antara pola desain MVC, MVP & MVVM" maka kita mungkin mendapatkan beberapa URL yang membahas perbedaan antara pola desain MVC MVP & MVVM secara teoritis seperti :

MVP

Gunakan dalam situasi di mana pengikatan melalui datacontext tidak dimungkinkan. Formulir Windows adalah contoh sempurna dari ini. Untuk memisahkan tampilan dari model, presenter diperlukan. Karena tampilan tidak dapat secara langsung mengikat ke presenter, informasi harus diteruskan ke tampilan melalui antarmuka (IView).

MVVM

Gunakan dalam situasi di mana pengikatan melalui datacontext dimungkinkan. Mengapa? Berbagai antarmuka IView untuk setiap tampilan dihapus yang berarti lebih sedikit kode untuk dipelihara. Beberapa contoh di mana MVVM dimungkinkan termasuk proyek WPF dan javascript menggunakan Knockout.

MVC

Gunakan dalam situasi di mana koneksi antara tampilan dan sisa program tidak selalu tersedia (dan Anda tidak dapat menggunakan MVVM atau MVP secara efektif). Ini dengan jelas menggambarkan situasi di mana API web dipisahkan dari data yang dikirim ke browser klien. ASP.NET MVC dari Microsoft adalah alat yang hebat untuk mengelola situasi seperti itu dan menyediakan kerangka kerja MVC yang sangat jelas


Tapi saya belum menemukan satu artikel pun yang membahas perbedaan secara teoritis bersama dengan kode sampel.

Akan sangat bagus jika saya mendapatkan artikel yang membahas perbedaan antara 3 pola desain ini (MVC, MVP & MVVM) bersama dengan kode.

Saya ingin mendapatkan kode sumber 3 aplikasi CRUD serupa yang telah diterapkan oleh tiga pola desain ini (MVC, MVP & MVVM). Sehingga saya bisa membaca kode dan memahami bagaimana seseorang harus menulis kode untuk tiga derai desain ini (MVC, MVP & MVVM).

Jadi, jika ada artikel seperti itu yang membahas bagaimana kode akan terlihat berbeda untuk 3 pola desain ini (MVC, MVP & MVVM) maka silakan redirect saya ke artikel itu.


14
Di TechEd 2011 ada presentasi yang bagus tapi sederhana tentang 3 pola ini. Pembicara membuat dan menunjukkan contoh di atas model bisnis yang sama menggunakan C # dan Visual Studio. Berikut adalah video di channel9 MVC, MVP dan MVVM: Perbandingan Pola Arsitektur
Marco Medrano

2
Inilah artikelnya: realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android . IMO sangat ditulis dengan baik dan jelas. Ini juga memiliki repo Github dengan cabang untuk setiap pola.
cuddlecheek

Jawaban:


100

Beberapa perbedaan dasar dapat ditulis secara singkat:

MVC:

MVC tradisional adalah di mana ada

  1. Model: Bertindak sebagai model untuk data
  2. Lihat: Penawaran dengan tampilan ke pengguna yang bisa menjadi UI
  3. Pengontrol: Mengontrol interaksi antara Model dan Tampilan, tempat tampilan memanggil pengontrol untuk memperbarui model. Lihat dapat memanggil beberapa pengontrol jika diperlukan.

MVP:

Mirip dengan MVC tradisional tetapi Controller digantikan oleh Presenter. Tetapi Presenter, tidak seperti Pengendali bertanggung jawab untuk mengubah pandangan juga. Tampilan biasanya tidak memanggil presenter.

MVVM

Perbedaannya di sini adalah kehadiran Model Tampilan. Ini adalah semacam implementasi Pola Desain Pengamat, di mana perubahan dalam model diwakili dalam pandangan juga, oleh VM. Misalnya: Jika slider diubah, tidak hanya model diperbarui tetapi data yang mungkin berupa teks, yang ditampilkan dalam tampilan juga diperbarui. Jadi ada data dua arah yang mengikat.


1
Detail kecil - Anda dapat memilih apakah data mengikat dua arah atau Anda juga dapat menentukan satu cara mengikat.
Jviaches

10
"Tampilan biasanya tidak memanggil presenter"? dapatkah Anda menjelaskan lebih lanjut tentang kalimat ini? jika ui view tidak akan memanggil presenter yang akan?
Amir Ziarati

3
@AmirZiarati Presenter mengawasi acara. Dalam hal terjadi peristiwa, presenter ikut bermain dan mengambil tindakan yang diperlukan.
Pritam Banerjee

ya asalkan memiliki referensi untuk melihat. saya salah, saya pikir maksud Anda pandangan bahkan tidak perlu memanggil presenter awalnya sementara setidaknya harus satu kali. terima kasih;)
Amir Ziarati

1
@PritamBanerjee, Dari penjelasannya, baik MVP & MVVM hampir memiliki fungsi yang sama. P atau VM memperbarui kedua M & V.
Manohar Reddy Poreddy

42

MVC, MVP, MVVM

MVC (yang lama)

MVP (lebih modular karena koplingnya rendah. Presenter adalah mediator antara View dan Model)

MVVM (Anda sudah memiliki ikatan dua arah antara komponen VM dan UI, sehingga lebih otomatis daripada MVP) masukkan deskripsi gambar di sini

Gambar lain: masukkan deskripsi gambar di sini


24
Tolong jangan hanya menyalin gambar - terutama ketika mereka tidak setuju di antara mereka sendiri. Lihat MVC (yang lama tidak Anda lihat) berbicara browser untuk melihat di gambar atas, tetapi berbicara ke controller di gambar bawah.
peter.fr

1
@ UddhavGautam Agak membingungkan karena gambar pertama menunjukkan View sebagai titik masuk dan yang kedua menunjukkan Controller.
everlasto

1
Dalam diagram pertama, apa perbedaan antara MVVM dan MVP? Seperti yang saya lihat, itu hanya tautan antara V dan VM / P. Yang dalam satu kasus memiliki pesan bolak-balik sebagai tautan dua arah dan yang lain diwakili sebagai dua tautan searah. Saya tidak melihat perbedaan fungsional di antara mereka. Apa yang saya lewatkan?
iCyberPaul

1
Browser berarti pengguna dari mana interaksi terjadi antara Anda dan aplikasi.
Uddhav Gautam

4
Plot twist: tidak ada yang tahu apa yang sebenarnya terjadi. Mereka semua sebenarnya hanya hal yang sama. Ha ha. Tidak, tapi sungguh, bahkan dengan gambar-gambar "membantu" ini sulit untuk memproses apa yang sedang terjadi. Saya pikir itu bagian dari masalah / kebingungan.
Andrew

34

Penjelasan Hebat dari tautan: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Pertama mari kita lihat MVC

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 berbeda untuk diberikan berdasarkan operasi yang sedang dijalankan.

Ada 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 - Presenter Tampilan Model

Sekarang mari kita lihat pola MVP. Itu terlihat sangat mirip dengan MVC, kecuali untuk beberapa perbedaan utama:

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 View berdasarkan tindakan yang diminta yang dilakukan pada Model, tetapi View tidak sadar Model.

MVVM - Model View View Model

Jadi dengan pola MVC dan MVP di depan kita, mari kita lihat pola MVVM dan lihat apa perbedaannya:

Input dimulai dengan View, bukan View Model.

Sementara Tampilan memegang referensi ke Model Tampilan, Model Tampilan tidak memiliki informasi tentang Tampilan. Inilah sebabnya mengapa dimungkinkan untuk memiliki pemetaan satu-ke-banyak antara berbagai Tampilan dan satu Model Tampilan ... bahkan lintas teknologi. Misalnya, Tampilan WPF dan Tampilan Silverlight dapat berbagi Model Tampilan yang sama.


7
"Ini karena View tidak memiliki pengetahuan atau referensi ke controller" Ini tidak benar
Adam Wolski

@AmirZiarati ViewModel bukan bagian dari pola MVP tetapi MVVM.
Joe

Saya akan lebih baik jika Anda memberikan contoh seperti di mana kita dapat menggunakan pola ini
JKA

3

Gambar di bawah ini dari artikel yang ditulis oleh Erwin van der Valk:

gambar menjelaskan MVC, MVP dan MVVM - oleh Erwin Vandervalk

The Artikel menjelaskan perbedaan dan memberikan beberapa contoh kode dalam C #


Gambar di atas tidak membingungkan, seperti di MVC mengapa LIHAT langsung mengakses Model? sama untuk orang lain?
smkrn110

Dalam diagram ini, tidak jelas apa arti panah. Apakah panah berarti akses atau manipulasi? Dalam diagram MVC, tidak jelas mengapa tidak ada panah yang dimulai dari Model
Pontios
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.