MVVM atau MVC? Ingin menggunakan kelas yang sama untuk WPF dan ASP.NET

10

Saya seorang pemula dalam hal Pola Desain. Saya baru mulai belajar MVC ketika saya mendengar buzz baru, MVVM.

Saya ingin mempelajari wawasan keduanya dengan mendesain ulang inventaris lama dan aplikasi faktur yang saya kembangkan untuk klien. Saya ingin menulis aplikasi WPF berbasis Windows dan versi berbasis Web. Saya ingin menggunakan kelas yang sama jika memungkinkan, jika tidak, maka setidaknya dengan sedikit modifikasi.

Saya membaca beberapa artikel, tetapi saya tidak mengikuti arsitektur dan konsep tingkat tinggi. NET 3.5 & 4 yang dibahas di sana. Saya ingin bergerak selangkah demi selangkah dengan mendesain hanya apa yang benar-benar saya butuhkan dalam proyek kehidupan nyata saya.

Apakah ada referensi langkah demi langkah yang mudah untuk MVVM? Apakah MVVM super-set atau sub-set MVC? Pola mana yang modern dan mana yang harus saya pilih untuk versi Windows & Web aplikasi saya?

Ada kelas-kelas tertentu yang jarang saya perlu hubungkan dengan View. Dalam hal itu, merancang kelas yang sama dengan cara MVVM akan terbukti menjadi tenaga kerja tambahan.

RPK
sumber

Jawaban:

10

Apakah ada referensi langkah demi langkah yang mudah untuk MVVM?

Ya ada. Lihatlah di sini.

Apakah MVVM super-set atau sub-set MVC?

MVVM milik keluarga MVC, jadi, jika Anda bisa mengatakan itu, itu adalah bagian. Varian untuk memisahkan UI dari logika bisnis di bawahnya. Saya akan menggambarkannya sebagai saudara kandung dari MVC. Sejak awal OOP orang telah mencari cara untuk memisahkan UI dari logika mereka. MVC adalah pola dasar pertama yang berkembang. Ini cukup sederhana, meskipun kebanyakan orang tidak melakukannya dengan benar. Tampilan hanyalah pengamat model dan menyebutnya bila perlu. Controller hanyalah sebuah strategi agar view dapat berkomunikasi dengan model, misalnya ketika Anda memerlukan perilaku yang dapat ditukar (yaitu ReadonlyController, AdminController). MVC sangat sukses dan itu benar-benar praktik yang baik untuk menerapkannya.

MVVM adalah jenis khusus Pola MVP, seperti yang dijelaskan oleh Martin Fowler . MVP mencoba untuk menjaga tampilan sebodoh mungkin (sambil tetap mengambil input pengguna, dll.), Sehingga meningkatkan testability. Ini bertujuan untuk sebuah abstraksi dari pandangan dan interaksi-logika yang dimasukkan ke dalam presenter. Presenter hanya berkomunikasi dengan model / logika bisnis dan memperbarui View. Martin Fowler menggambarkan MVVM cukup banyak dalam Pola Model Presentasinya.

Tampilan sepenuhnya disarikan menjadi ViewModel. Ketika Viewkebutuhan suatu properti, ViewModelkebutuhan untuk memilikinya juga. Itu (ViewModel) dimaksudkan untuk sepenuhnya independen dari teknologi UI yang mendasarinya, sebuah abstraksi. Untuk berkomunikasi antara View dan ViewModel, pola sinkronisasi perlu digunakan (yaitu Pengamat). Ini tidak mudah untuk dicapai dalam lingkungan web tanpa kewarganegaraan. MVVM berbeda dari MVP, karena View tidak mengikat model / logika bisnis Anda tetapi ke ViewModel sebagai gantinya.

Pola mana yang modern dan mana yang harus saya pilih untuk versi Windows & Web aplikasi saya?

Model Presentasi (mirip MVVM) dalam teori harus benar-benar independen dari teknologi UI yang digunakan. Namun, aspek sinkronisasi perlu dicakup. Ini dapat dengan mudah dilakukan dengan mengikat Perintah dan Properti dengan WPF, di mana lem sinkronisasi sudah ada. Dengan ASP.NET, ini adalah cerita yang berbeda. Namun, ada artikel di CodeProject yang menggunakan Presentation Model Pattern dengan semua teknologi Windows UI. Silahkan lihat.

Elang
sumber
4

Karena masalah siklus hidup dan kebutuhan untuk menjaga keadaan di antara posting halaman, Anda akan merasa sangat sulit untuk menggunakan kembali 100% dari kode UI Anda antara web dan WPF. Asp.net tidak memiliki pengikatan data yang kuat yang diperlukan untuk MVVM, juga banyak logika perlu dijalankan dalam jscript hari ini karena orang mengharapkan UI untuk memperbarui dirinya sendiri tanpa perlu postback.

Jika Anda bisa menggunakan SilverLight hidup Anda akan jauh lebih kompleks :-)

Anda juga dapat meng-host browser web di aplikasi WPF Anda untuk bit-bit umum UI?

Ian
sumber
Apa manfaat yang bisa saya dapatkan dengan SilverLight?
RPK
1
@PRK, Silverlight sebagian besar akan membiarkan Anda melakukan semua yang dilakukan WPF dan jika Anda bisa mendapatkan semua pengguna "web" Anda untuk menginstalnya, juga akan membiarkan untuk membuat solusi yang diakses oleh web dan "terasa" seperti aplikasi web.
Ian
4

Niat Anda untuk menggunakan kelas yang sama untuk UI berbasis ASP.Net dan WPF tidak terlalu praktis. Penyatuan data dan penggunaan javascript di web sangat berbeda dengan WPF. Satu-satunya pilihan yang dapat saya pikirkan adalah MVP dengan tampilan yang sepenuhnya pasif . Secara teori Anda dapat memiliki presenter yang sama yang mengisi halaman Web dan WPF.
Dalam praktiknya saya akan mengembangkan arsitektur di mana sebagian besar aturan bisnis berada dalam lapisan layanan web dan dua tingkat presentasi berbeda dengan aturan bisnis sesedikit mungkin yang berbicara dengan layanan web ini.

softveda
sumber