Pertanyaan Apa perbedaan antara MVC dan MVVM?


Apakah ada perbedaan antara pola "Model View Controller" standar dan pola Model / Tampilan / TampilanModel Microsoft?


1097
2018-03-20 20:09


asal


Jawaban:


MVC / MVVM bukan merupakan baik / atau pilihan.

Kedua pola muncul, dengan cara yang berbeda, baik dalam pengembangan ASP.Net dan Silverlight / WPF.

Untuk ASP.Net, MVVM digunakan untuk dua arah data dalam tampilan. Ini biasanya merupakan implementasi sisi klien (mis. Menggunakan Knockout.js). MVC di sisi lain adalah cara memisahkan kekhawatiran di sisi server.

Untuk Silverlight dan WPF, pola MVVM lebih mencakup dan bisa muncul untuk bertindak sebagai pengganti MVC (atau pola lain untuk mengatur perangkat lunak menjadi tanggung jawab yang terpisah). Satu asumsi, yang sering keluar dari pola ini, adalah bahwa ViewModel hanya mengganti controller di MVC (seolah-olah Anda bisa mengganti VM untuk C dalam akronim dan semua akan dimaafkan) ...

The ViewModel tidak tidak selalu menggantikan kebutuhan untuk Pengontrol terpisah.

Masalahnya adalah: bahwa untuk dapat diuji secara independen *, dan terutama dapat digunakan kembali saat diperlukan, model tampilan tidak memiliki gagasan tentang tampilan apa yang ditampilkan, tetapi yang lebih penting tidak tahu dari mana datanya berasal.

* Catatan: dalam prakteknya Pengontrol menghapus sebagian besar logika, dari ViewModel, yang membutuhkan pengujian unit. VM kemudian menjadi wadah bodoh yang membutuhkan sedikit, jika ada, pengujian. Ini adalah hal yang baik karena VM hanyalah jembatan, antara perancang dan pembuat kode, jadi harus tetap sederhana.

Bahkan dalam MVVM, pengontrol biasanya akan berisi semua logika pemrosesan dan memutuskan data apa yang akan ditampilkan di mana pandangan menggunakan model tampilan mana.

Dari apa yang telah kita lihat sejauh ini manfaat utama dari pola ViewModel untuk menghapus kode dari kode XAML di belakang untuk membuat XAML mengedit tugas yang lebih independen. Kami masih membuat pengendali, sebagaimana dan ketika diperlukan, untuk mengontrol (tidak ada maksud) keseluruhan logika aplikasi kami.

Pedoman MVCVM dasar yang kami ikuti adalah:

  • Views menampilkan bentuk data tertentu. Mereka tidak tahu dari mana datanya berasal.
  • ViewModels pegang bentuk data dan perintah tertentu, mereka tidak tahu dari mana data, atau kode, berasal dari atau bagaimana itu ditampilkan.
  • Model pegang data aktual (berbagai konteks, menyimpan atau metode lain)
  • Pengontrol mendengarkan, dan menerbitkan, acara. Pengontrol menyediakan logika yang mengontrol data apa yang dilihat dan di mana. Pengontrol menyediakan kode perintah ke ViewModel sehingga ViewModel benar-benar dapat digunakan kembali.

Kami juga mencatat bahwa Kerangka kode-gen patung mengimplementasikan MVVM dan pola yang mirip dengan Prism DAN itu juga membuat ekstensif menggunakan pengendali untuk memisahkan semua logika use-case.

Jangan berasumsi pengendali dibuat usang oleh model Tampilan.

Saya telah memulai sebuah blog tentang topik ini yang akan saya tambahkan sebagai dan kapan saya bisa. Ada masalah dengan menggabungkan MVCVM dengan sistem navigasi umum, karena kebanyakan sistem navigasi hanya menggunakan Views dan VM, tetapi saya akan membahasnya di artikel selanjutnya.

Manfaat tambahan menggunakan model MVCVM adalah itu hanya objek pengendali yang harus ada dalam memori untuk kehidupan aplikasi dan pengendali berisi terutama kode dan data negara kecil (yaitu overhead memori kecil). Hal ini menjadikan aplikasi dengan memori jauh lebih sedikit daripada solusi di mana model tampilan harus dipertahankan dan sangat ideal untuk jenis pengembangan seluler tertentu (misalnya Windows Mobile menggunakan Silverlight / Prism / MEF). Ini tentu saja tergantung pada jenis aplikasi karena Anda mungkin masih perlu mempertahankan VM cache sesekali untuk responsif.

Catatan: Postingan ini telah diedit beberapa kali, dan tidak secara khusus menargetkan pertanyaan sempit yang ditanyakan, jadi saya telah memperbarui bagian pertama untuk sekarang juga. Sebagian besar diskusi, dalam komentar di bawah ini, hanya berhubungan dengan ASP.Net dan bukan gambaran yang lebih luas. Posting ini dimaksudkan untuk mencakup penggunaan MVVM yang lebih luas di Silverlight, WPF dan ASP.Net dan mencoba menghindari orang mengganti pengendali dengan ViewModels.


578
2017-08-22 09:19



Saya pikir cara termudah untuk memahami apa arti dari singkatan ini adalah melupakannya sejenak. Sebaliknya, pikirkan tentang perangkat lunak yang mereka gunakan, masing-masing dari mereka. Ini benar-benar bermuara pada perbedaan antara web awal dan desktop.

Akronim pertama, MVC, berasal dari web. (Ya, itu mungkin sudah ada sebelumnya, tetapi web adalah bagaimana itu dipopulerkan ke massa pengembang web.) Pikirkan database, halaman HTML, dan peralihan kode. Mari kita perbaiki ini hanya sedikit untuk sampai di MVC: Untuk »database«, mari kita asumsikan database plus kode antarmuka. Untuk »halaman HTML«, mari kita asumsikan template HTML plus kode pemrosesan template. Untuk »kode inbetween«, mari kita asumsikan pemetaan kode klik pengguna untuk tindakan, mungkin mempengaruhi database, pasti menyebabkan tampilan lain untuk ditampilkan. Itu saja, setidaknya untuk tujuan perbandingan ini.

Mari kita mempertahankan satu fitur dari hal-hal web ini, tidak seperti sekarang ini, tetapi seperti yang sudah ada sepuluh tahun yang lalu, ketika Javascript adalah gangguan rendah, tercela, yang benar-benar programmer yang baik untuk menghindari: Halaman HTML pada dasarnya bodoh dan pasif . Browser adalah klien yang tipis, atau jika Anda mau, klien yang buruk. Tidak ada kecerdasan di browser. Aturan memuat ulang laman penuh. The »view« dihasilkan lagi setiap kali.

Mari kita ingat bahwa cara web ini, meskipun semua kemarahan, sangat mundur dibandingkan dengan desktop. Aplikasi desktop adalah klien yang gemuk, atau klien kaya, jika Anda mau. (Bahkan program seperti Microsoft Word dapat dianggap sebagai semacam klien, klien untuk dokumen.) Mereka adalah klien yang penuh kecerdasan, penuh pengetahuan tentang data mereka. Mereka menyatakan. Mereka menyimpan data yang mereka tangani dalam memori. Tidak ada omong kosong seperti pemuatan ulang halaman penuh.

Dan cara desktop kaya ini mungkin adalah tempat akronim kedua berasal, MVVM. Jangan tertipu oleh surat-surat, dengan kelalaian C. Pengendali masih ada. Mereka perlu. Tidak ada yang dihapus. Kami hanya menambahkan satu hal: statefulness, data cache pada klien (dan bersama dengan itu intelijen untuk menangani data itu). Data itu, pada dasarnya cache pada klien, sekarang dipanggil »ViewModel«. Itu yang memungkinkan interaktivitas kaya. Dan begitulah.

  • MVC = model, controller, view = pada dasarnya komunikasi satu arah = interaktivitas yang buruk
  • MVVM = model, pengontrol, cache, view = komunikasi dua arah = interaktivitas kaya

Kita dapat melihat bahwa dengan Flash, Silverlight, dan - yang paling penting - Javascript, web telah memeluk MVVM. Browser tidak lagi dapat secara sah disebut klien tipis. Lihatlah programabilitas mereka. Lihatlah konsumsi memori mereka. Lihatlah semua interaktivitas Javascript pada halaman web modern.

Secara pribadi, saya menemukan teori dan bisnis akronim ini lebih mudah dipahami dengan melihat apa yang mengacu pada realitas konkret. Konsep abstrak berguna, terutama ketika didemonstrasikan pada materi konkret, sehingga pemahaman bisa datang lingkaran penuh.


213
2018-02-13 14:11



MVVM  Model-View ViewModel mirip dengan MVC, Pengontrol Model-Tampilan

Pengontrol diganti dengan ViewModel. ViewModel duduk di bawah lapisan UI. ViewModel mengekspos objek data dan perintah yang dibutuhkan oleh tampilan. Anda dapat menganggap ini sebagai objek penampung yang dilihatnya untuk mengambil data dan tindakannya. ViewModel menarik datanya dari model.

Russel East apakah blog membahas lebih detail Mengapa MVVM berbeda dari MVC


166
2018-03-20 20:18



Untuk satu hal, MVVM adalah perkembangan pola MVC yang menggunakan XAML untuk menangani layar. Artikel ini menguraikan beberapa aspek dari keduanya.

Dorongan utama dari model / View / ViewModel arsitektur tampaknya bahwa di atas data ("Model"), ada lapisan lain dari komponen non-visual ("ViewModel") yang memetakan konsep data lebih dekat ke konsep tampilan data ("Tampilan"). Ini adalah ViewModel yang Tampilannya mengikat, bukan Model secara langsung.


85
2018-03-20 20:17



Kamu bisa lihat penjelasannya Pola MVVM di lingkungan Windows:

Dalam pola desain Model-View-ViewModel, aplikasi terdiri dari tiga komponen umum. enter image description here

  • Model: Ini mewakili model data yang digunakan oleh aplikasi Anda. Misalnya, dalam aplikasi berbagi gambar, lapisan ini mungkin mewakili kumpulan gambar yang tersedia di perangkat dan API yang digunakan untuk membaca dan menulis ke pustaka gambar.

  • Melihat: Aplikasi biasanya terdiri dari beberapa halaman UI. Setiap halaman yang ditampilkan kepada pengguna adalah pandangan dalam terminologi MVVM. Tampilannya adalah kode XAML yang digunakan untuk mendefinisikan dan memberi gaya apa yang dilihat pengguna. Data dari model ditampilkan kepada pengguna, dan ini tugas dari ViewModel untuk memberi UI pada data ini berdasarkan status aplikasi saat ini. Misalnya, dalam aplikasi berbagi gambar, tampilan akan menjadi UI yang menunjukkan daftar album kepada pengguna di perangkat, gambar di album, dan mungkin lainnya yang menunjukkan gambar tertentu kepada pengguna.

  • ViewModel: The ViewModel mengikat model data, atau hanya model, ke UI, atau tampilan, dari aplikasi. Ini berisi logika yang dapat digunakan untuk mengelola data dari model dan memaparkan data sebagai sekumpulan properti tempat UI XAML, atau tampilan, dapat diikat. Misalnya, dalam aplikasi berbagi gambar, ViewModel akan memaparkan daftar album, dan untuk setiap album memaparkan daftar gambar. UI adalah agnostik dari mana gambar berasal dan bagaimana mereka diambil. Itu hanya mengetahui satu set gambar yang diekspos oleh ViewModel dan menunjukkannya kepada pengguna.


44
2018-06-12 20:48



Saya pikir salah satu perbedaan utama adalah bahwa dalam MVC, V Anda membaca M Anda secara langsung, dan pergi melalui C untuk memanipulasi data, sedangkan di MVVM, VM Anda bertindak sebagai proxy M, serta menyediakan fungsionalitas yang tersedia untuk Anda V.

Jika saya tidak penuh dengan sampah, saya terkejut tidak ada yang membuat hibrida, di mana VM Anda hanyalah proxy M, dan C menyediakan semua fungsi.


35
2018-05-21 11:38



Perbedaan Sederhana: (Terinspirasi oleh kursus Coursera AngularJS Yaakov)

enter image description here

MVC (Pengontrol Model Tampilan)

  1. Model: Model berisi informasi data. Tidak memanggil atau menggunakan Kontroler dan Tampilan. Berisi logika bisnis dan cara untuk merepresentasikan data. Beberapa data ini, dalam beberapa bentuk, dapat ditampilkan dalam tampilan. Ini juga dapat berisi logika untuk mengambil data dari beberapa sumber.
  2. Pengontrol: Bertindak sebagai koneksi antara tampilan dan model. Lihat panggilan Controller dan Controller memanggil model. Pada dasarnya menginformasikan model dan / atau pandangan untuk berubah sebagaimana mestinya.
  3. Melihat: Transaksi dengan bagian UI. Berinteraksi dengan pengguna.

MVVM (Model Tampilan Model Tampilan)

ViewModel:

  1. Ini adalah representasi dari keadaan pandangan.
  2. Ini menyimpan data yang ditampilkan di tampilan.
  3. Menanggapi untuk melihat peristiwa, alias logika presentasi.
  4. Panggilan fungsi lain untuk pemrosesan logika bisnis.
  5. Jangan langsung meminta tampilan untuk menampilkan apa pun.

17
2017-12-14 00:20