Apa perbedaan antara Controller di MVC dan ViewModel di MVVM?

21

Saya tidak bisa melihat perbedaan antara MVC dan MVVM dengan jelas. Saya merasa Perintah di dalam ViewModel sama seperti metode Aksi dalam Kontroler. Dan baik Controller maupun ViewModel akan memberi tahu View untuk me-refresh dirinya sendiri setelah memodifikasi keadaan Model melalui Binding Data. Apa perbedaan utama antara kedua pola?

TomCaps
sumber

Jawaban:

25

Pengontrol dan ViewModel berbeda dalam berbagai cara.

Di MVC Pengendali tahu tampilan, itu bisa mengubah tampilan. Ia juga tahu Model dan bisa menyebutnya. Dalam MVVM, sebuah ViewModel adalah representasi abstrak dari Tampilan dan tidak tahu UI konkret, ia membungkus Model sedemikian rupa sehingga dapat ditampilkan sesuai keinginan.

Dalam MVC klasik, pengontrol hanyalah strategi Tampilan untuk berinteraksi dengan Model. Bahkan, terkadang Controller bahkan tidak diperlukan. Di MVVM Anda tidak membutuhkannya, karena Anda dapat memiliki ViewModels berbeda untuk View yang sama jika Anda memerlukan perilaku yang berbeda. Dalam MVC Anda dapat memiliki misalnya ReadOnlyController atau AdminController untuk berkomunikasi dengan Model. Dalam MVVM Anda hanya bisa memiliki dua ViewModels dan Anda memilih yang Anda butuhkan untuk View.

Tetapi mereka memiliki beberapa kesamaan. Dalam kedua pola, View adalah pengamat . Dalam MVC klasik, view adalah pengamat model, di MVVM itu adalah pengamat ViewModel.

Kedua pola dimaksudkan untuk memberikan pemisahan kekhawatiran. MVVM terutama bertujuan untuk memberikan abstraksi dari View, sepenuhnya independen dari teknologi UI yang digunakan. MVC tidak sejauh itu. Fokus utamanya adalah pada pemisahan masalah, sehingga Anda tidak menempatkan logika bisnis (Model) ke tampilan.

Anda mungkin juga menemukan jawaban ini untuk pertanyaan serupa bermanfaat.

Akhirnya, saya harus mengatakan bahwa kedua pola itu milik keluarga yang sama. MVP, di mana MVVM adalah keturunan adalah saudara kandung MVC. Jika Anda ingin tahu lebih banyak, ikuti tautan ini ke situs web Martin Fowler , ia menjelaskan setiap detail secara terperinci.

Elang
sumber
tidakkah Anda berpikir arsitektur model-view ini paling baik dipahami oleh orang-orang yang mengimplementasikannya. Saya percaya ini masalah pilihan bagi pengembang. Satu memilih MVC atau MVVM tergantung apakah ia ingin abstraksi total tentang tampilan dengan sedikit over-head (dalam kasus MVVM).
Pankaj Upadhyay
@Pankaj Upadhyay: Yang mana yang harus Anda gunakan tergantung pada kebutuhan dan pilihan teknologi Anda dan juga keistimewaan platform Anda.
Falcon
Saya percaya bahwa arsitektur MVC cukup baik untuk apa pun, tapi itu mungkin karena saya belum menghadapi masalah yang sangat membutuhkan MVVM. IMO, Anda tentu perlu memiliki kontrol atas tampilan karena membuatnya benar-benar longgar akan meningkatkan lebih banyak kesalahan dalam peningkatan di masa mendatang
Pankaj Upadhyay
1
@Pankaj Upadhyay: Jika Anda ingin menggunakan logika yang sama untuk berbagai teknologi UI, maka MVP lebih unggul. Saya tidak berpikir bahwa Anda perlu kontrol atas tampilan. Ini bisa sepenuhnya independen dan Anda dapat menguji ViewModels juga - jika tidak lebih baik. Pemisahan yang lebih baik juga menguntungkan para desainer karena pekerjaan pada proyek dapat dipartisi dengan lebih baik.
Falcon