Kerangka kerja untuk MVVM apa yang harus saya gunakan? [Tutup]

233

Saya mengembangkan aplikasi dengan model MVVM, tetapi saya telah mencapai titik di mana saya harus memilih kerangka kerja mana yang akan digunakan.

Di antara opsi yang mungkin adalah:

  • MVVM Toolkit
  • Yayasan MVVM
  • Kerangka Aplikasi WPF (WAF)
  • MVVM ringan
  • Caliburn
  • Menang
  • Prisma
  • ReaktifUI

Menurut pengalaman Anda, mana yang lebih baik?

Rangel
sumber
14
+1 - Pertanyaan bagus, tapi tolong klarifikasi 'lebih baik'. Kerangka kerja yang berbeda memberikan keuntungan yang berbeda, yang terbaik tergantung pada kebutuhan Anda. Nantikan jawaban :)
Russell
Yah itu akan sangat baik yang dapat Anda gunakan dengan WPF dan Silverlight, dan dengan kurva belajar minimal.
Rangel
2
Anda mungkin ingin memeriksa Caliburn juga. codeplex.com/caliburn
Kent Boogaart
Maaf Kent. Bagaimana saya bisa melupakan Caliburn?
Pete OHanlon
2
Tutup dan tua tapi ... Saya melakukan proyek pertama saya menggunakan Prism (jawaban di bawah) karena saya memerlukan dukungan komponen. Proyek terakhir saya, saya lakukan mentah - tidak ada kerangka sama sekali. Yang Anda butuhkan adalah kelas perintah dan Anda dapat melakukan MVVM tanpa kerangka kerja - itu tentang berat yang bisa Anda dapatkan.
dave

Jawaban:

194

Ini benar-benar tergantung pada apa yang Anda coba capai, dan berapa banyak infrastruktur yang Anda inginkan sudah ada, ditambah kemudahan yang Anda dapat menemukan sampel yang membantu Anda. Saya akan menyatakan minat di sini, karena saya telah aktif terlibat dalam setidaknya satu kerangka kerja MVVM, dan saya sudah mendapat masukan dari orang lain melalui kelompok WPF Disciples, jadi saya sedikit bias. Mengatakan itu, begini:

Microsoft MVVM Toolkit - ini masih sangat banyak di tahap alpha. Ketika awalnya dirilis, butuh sedikit biadab dari para Murid karena apa yang tidak dilakukannya. Mengatakan itu, MS ingin meningkatkan kerangka kerja ini jadi satu untuk ditonton - hanya belum siap.

MVVM Foundation - versi kerangka kerja Josh Smith. Josh adalah salah satu ayah MVVM, dan telah menjadi pembela dan pengajar pola yang besar. Akibatnya, banyak hal yang akan Anda temukan di kerangka kerja lain memiliki sidik jari Josh. Kerangka kerja ini dimaksudkan untuk memberikan dasar-dasar MVVM, dan bukan untuk mengatasi beberapa masalah yang lebih esoteris. Awalnya ini dimaksudkan hanya untuk WPF, tetapi orang-orang seperti Laurent Bugnion dan saya sendiri telah menambahkan fungsionalitas / proyek yang berarti ini akan menjadi kerangka kerja yang kompatibel dengan Silverlight juga.

WAF - tidak ada pengalaman, jadi saya tidak bisa berkomentar tentang itu, saya khawatir.

MVVM Light - Laurent Bugnion mengambilnya, dan baru saja diperbarui ke versi 2. Ini adalah kerangka kerja yang sangat baik, tetapi sekali lagi ini tidak dimaksudkan untuk mencakup setiap aspek aplikasi MVVM. Mengingat latar belakang Laurent, ia memiliki dukungan Silverlight dan Blendability yang sangat kuat di dalamnya.

Pembaruan Laurent baru saja memberi tahu saya bahwa versi .NET 3.5 dan .NET 4.0 kompatibel dengan fitur. Kami akan pergi Laurent.

Cinch - kerangka kerja MVV khusus WPF Sacha Barber yang luar biasa. Ini mencakup lebih banyak landasan daripada kerangka kerja yang telah saya bicarakan di atas. Ini merupakan kerangka kerja yang sangat baik, dan mengambil keuntungan dari konsep-konsep yang tercakup dalam proyek Onyx yang luar biasa dari Bill Kempf . Onyx dimaksudkan untuk melengkapi kerangka kerja MVVM, dan menambahkan fungsionalitas yang biasanya sulit dilakukan orang di MVVM / WPF. Sekali lagi, awalnya hanya dimaksudkan untuk WPF, Onyx telah berkembang untuk menyertakan kompatibilitas SL - pekerjaan yang saya sangat bangga telah terlibat di dalamnya.

Prism - Sekali lagi, saya tidak pernah menggunakannya, tetapi saya telah mendengar banyak hal baik tentang itu.

Ocean - Karl Shifflett, Manajer Program di tim Cider, baru-baru ini merilis kerangka kerja WPF MVVM berfitur lengkap. Sekali lagi, ini adalah kerangka kerja yang sangat baik dan memiliki banyak untuk merekomendasikannya.

Intinya adalah, unduh kerangka kerja yang berbeda, lihatlah dan kerjakan mana yang paling sesuai dengan cara Anda berpikir dan persyaratan Anda. Jika Anda berpikir bahwa Anda mungkin ingin mendukung Silverlight dari basis kode yang sama maka kerangka kerja WPF saja harus didiskon.

Pete OHanlon
sumber
4
Saya menggunakan satu yang kami tulis, karena kami memiliki kebutuhan khusus untuk MVVM. Ini sangat dipengaruhi oleh pekerjaan yang Josh lakukan, dan saya akan merilisnya sebagai Open Source dalam waktu dekat (saya sibuk merobek bit kepemilikan). Ini disebut Goldlight.
Pete OHanlon
Bersamaan dengan itu, apa kerangka lapisan akses data Anda? teman-teman .. LINQ, LLBLGen, EF, nHibernate?
Jirapong
Itu tergantung pada proyek dan persyaratan. Terkadang kita menggunakan LINQ, terkadang NHibernate, terkadang Castle ActiveRecord, dan terkadang eXpress Persistent Objects.
Pete OHanlon
3
Hai Pete, hanya ingin berkomentar bahwa MVVM Light Toolkit berfungsi sama untuk WPF 3.5 dan WPF 4 seperti untuk Silverlight 3 dan Silverlight 4. Saya berhati-hati untuk menjaga fitur dalam sinkronisasi sebanyak yang saya bisa. Anda benar tentang perpaduan itu, ini adalah masalah utama bagi saya :) Cheers, Laurent
LBugnion
1
Saya kecewa bahwa MVVM Toolkit belum diperbarui untuk bekerja dengan Visual Studio 2010. Mungkin ingin menambahkan itu ke proses pengambilan keputusan. Kebanyakan orang yang saya tahu menggunakan template MVVM dalam 2010 menggunakan MVVM Light dan beberapa bermigrasi ke sana karena alasan ini saja.
ScottCher
54

Saya menemukan artikel ini sangat berguna http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Sehingga saya membawanya ke sini untuk pengguna yang akan datang

Saya memperbarui bagian Cinch dan menambahkan dukungan silverlight ke fitur-fiturnya

Maaf atas ceritanya yang panjang

Fitur umum:

• Kelas ViewModelBase (untuk implementasi antarmuka INotifyPropertyChanged)

• RelayCommand menyukai kelas untuk menautkan perintah UI ke penangan ViewModel

• Tes unit dilengkapi dengan kerangka kerja

Menang

• Penulis: Sacha Barber

• Dukungan Silverlight: tidak (Cinch versi 2 mendukung Silverlight)

• Dokumentasi: luar biasa, 6 artikel diterbitkan di CodeProject

• Hosting: CodePlex

• Lisensi: Lisensi Open Project Code

• Fitur:

  1. perilaku terlampir

  2. validasi menggunakan IDataErrorInfo

  3. dukungan untuk IEditableObject

  4. pembuatan dan berlangganan acara yang lemah

  5. pesan mediator menggunakan acara yang lemah

  6. Dukungan IOC / DI (menggunakan Unity)

  7. layanan: event logger, kotak pesan, dialog simpan terbuka, munculan

  8. threading helper

  9. dukungan untuk item menu

  10. model viewable dekat

  11. Generator kode MVVM

MVVM Light Toolkit

• Penulis: Laurent Bugnion

• Dukungan Silverlight: ya

• Dokumentasi: banyak artikel yang tersedia di blog Laurent + pengembang lain juga

• Hosting: CodePlex

• Lisensi: lisensi MIT

• Fitur:

  1. Pemasang MSI

  2. VS proyek dan template barang

  3. Cuplikan kode VS

  4. Sistem messenger untuk komunikasi model antar tampilan

  5. Menangani acara sebagai perintah

Pembantu MVVM

• Penulis: Mark Smith

• Dukungan Silverlight: no

• Dokumentasi: beberapa artikel di blog Markus

• Hosting: situs web pribadi

• Lisensi: tidak ditentukan

• Fitur:

  1. perilaku terlampir

  2. pembuatan viewmodel menggunakan ekstensi markup

  3. validasi berbasis atribut

  4. IOC / DI menggunakan pendekatan ServiceProvider

  5. model viewable dekat

  6. tunggu kursor (menggunakan WaitCursor baru () {// kode Anda di sini})

Yayasan MVVM

• Penulis: Josh Smith

• Dukungan Silverlight: no

• Dokumentasi: artikel tentang implementasi Messenger di blog Josh atau Marlon Grech

• Hosting: CodePlex

• Lisensi: MS-PL

• Fitur:

  1. Sistem messenger untuk komunikasi model antar tampilan

  2. Monitor acara PropertyChanged

Caliburn

• Penulis: Rob Eisenberg

• Dukungan Silverlight: ya

• Dokumentasi: lengkapi dokumentasi online yang tersedia

• Hosting: CodePlex http://www.codeplex.com/caliburn

• Lisensi: lisensi MIT

• Fitur:

  1. perintah dibangun di atas Tindakan dan dengan demikian berbagi banyak fitur yang sama, termasuk beberapa parameter input, filter dan eksekusi asinkron otomatis

  2. presenter yang menangani masalah siklus hidup UI seperti menangani aktivasi, deaktivasi, dan semantik shutdown untuk berbagai komponen UI

  3. Aplikasi Caliburn sepenuhnya dapat diuji

  4. berbagai utilitas seperti manajer tugas latar belakang

  5. mendukung berbagai pola UI (bukan hanya MVVM)

  6. wadah injeksi ketergantungan

Onyx

• Penulis: William e Kempf

• Dukungan Silverlight: no

• Dokumentasi: pengantar dasar tersedia di CodePlex

• Hosting: CodePlex

• Lisensi: tidak ditentukan

• Fitur:

  1. Pola ServiceLocator

  2. Pembuatan ViewModel menggunakan ekstensi markup kustom

  3. Layanan terkait UI seperti IDisplayMessage

Kalsium

• Penulis: Daniel Vaughan

• Dukungan Silverlight: no

• Dokumentasi: 2 artikel yang sangat rinci tentang CodeProject (part1 dan part2)

• Hosting: CodePlex

• Lisensi: gunakan, salin, ubah, dan / atau distribusikan dan simpan hak ciptanya!

• Fitur:

  1. Module Manager untuk mengaktifkan atau menonaktifkan modul saat runtime

  2. layanan olahpesan untuk berinteraksi dengan pengguna dari klien atau server menggunakan API yang sama

  3. Command Service untuk mengaitkan WPF ICommands dengan antarmuka konten yang hanya menjadi aktif ketika tampilan aktif atau model tampilan mengimplementasikan antarmuka

  4. Adaptor Wilayah untuk Bilah Alat dan Menu

  5. Pencatatan klien-server siap bekerja di luar kotak

  6. Termasuk modul, seperti Browser Web, Editor Teks, Output Window, dan banyak lagi

  7. Antarmuka tab dengan indikasi file kotor (dapat digunakan kembali di seluruh modul)

nRute

• Penulis: Rishi

• Dukungan Silverlight: ya

• Dokumentasi: banyak artikel tersedia di blog penulis (lihat halaman beranda proyek CodePlex untuk tautannya)

• Hosting: CodePlex

• Lisensi: MS-PL

• Fitur:

  1. mendukung perilaku dan pemicu model Blend3

  2. kerangka kerja pencari sumber daya

  3. lihat layanan: OpenFileDialog, ShowMessage…

  4. menggunakan atribut untuk memetakan Lihat dan ViewModel bersama

Nito MVVM

• Penulis: Shammah

• Dukungan Silverlight: no

• Dokumentasi: no

• Hosting: CodePlex

• Lisensi: tidak ditentukan

• Fitur:

  1. berbagai implementasi ramah MVVM dari antarmuka ICommand

Lautan

• Penulis: Karl Shifflet

• Dukungan Silverlight: no

• Dokumentasi: artikel tersedia di blog Karl

• Hosting: situs web pribadi

• Lisensi: tidak ditentukan

• Fitur:

  1. ditulis dalam VB.Net

  2. validasi berbasis atribut

  3. viewmodel kelas dasar: relaycommand, closeableviewmodel…

  4. Lapisan akses data SQL server

Kerangka kerja MVVM dasar

• Penulis: Lester Lobo

• Dukungan Silverlight: no

• Dokumentasi: contoh aplikasi yang tersedia dengan perpustakaan

• Hosting: CodePlex

• Lisensi: MS-PL

• Fitur:

  1. mendelegasikan Perintah \ Pengikat kunci

  2. pesan antara VM

  3. menangani acara sebagai perintah dengan perilaku terlampir

  4. menangani dialog (dan banyak lagi) sebagai layanan

  5. Cuplikan kode VS

GoodLight

• Penulis: Peter O'Hanlon • Dukungan Silverlight: ya

• Dokumentasi: contoh aplikasi yang tersedia dengan perpustakaan

• Hosting: CodePlex

• Lisensi: MS-PL

• Fitur:

  1. Manajemen "ruang kerja" (kumpulan dokumen yang dapat ditutup)

  2. dukungan kulit

  3. pesan antara VM

Nasser Hadjloo
sumber
Pos yang bagus. Saya pikir saya akan menambahkan bahwa Cinch versi 2 tidak mendukung Silverlight.
Kildareflare
44

Saya mencoba menggambarkan Kerangka kerja yang hilang dalam jawaban hebat Pete:

MVVM Toolkit (Microsoft) adalah perpustakaan yang sangat ringan dengan templat proyek Visual Studio yang harus mendukung pemula dengan pola ini. Jika Microsoft mendapatkan umpan balik yang baik untuk Toolkit mereka maka mereka mungkin mengimplementasikan ini sebagai template proyek Visual Studio (mungkin 2010) yang baru.

Prism (Microsoft p & p) adalah kerangka kerja yang menyediakan lebih dari dukungan untuk pola MVVM. Tujuan utama dari proyek ini adalah untuk membantu Anda membangunWPF modular dan / atau aplikasi Silverlight. Ketika Anda hanya perlu menerapkan pola MVVM atau Anda seorang pemula di .NET / WPF saya tidak akan merekomendasikan proyek ini. Lihat juga: Tautan .

WPF Application Framework (WAF) adalah kerangka kerja ringan yang membantu Anda membuat aplikasi WPF dengan MVVM. Ini hanya untuk WPF dan tidak mendukung Silverlight. Ini sedikit berbeda dari kebanyakan kerangka kerja MVVM lainnya dengan diperkenalkannya Pengontrol . Mereka bertanggung jawab atas alur kerja aplikasi dan mereka memediasi antara berbagai ViewModels.

jbe
sumber
19

Ah. Mvvm tidak benar-benar membutuhkan keseluruhan kerangka kerja untuk mendukung IMO. Jika Anda memahami konsepnya, cukup mudah untuk memulai dengan baseclass VM bersih yang mengimplementasikan INotify, dan langsung saja pergi dari sana.

Pierreten
sumber
4
Ada alasan mengapa banyak pengembang mengembangkan perpustakaan mvvm. Jika apa yang Anda katakan itu benar, lalu mengapa pengembang ini membuang waktu? Mengapa kerangka kerja ini pengguna tetap menggunakan kerangka mvvm favorit mereka? Benar, "Mvvm tidak benar-benar membutuhkan seluruh kerangka kerja untuk mendukung IMO". Tetapi tidak praktis untuk dilakukan tanpa kerangka kerja MVVM.
Syaiful Nizam Yahya
3
-1 IMO menulis kelas RelayCommand Anda sendiri untuk ICommands, kelas Messenger untuk komunikasi antar-VM dan wadah IoC Anda sendiri untuk menyebutkan hanya alat paling dasar yang diperlukan untuk aplikasi WPF yang berfungsi dengan baik, adalah PITA utama. Jawaban Anda hanya valid untuk program yang paling sederhana.
Heliac
10

Campur sendiri!

Saya menggunakan EventAggregator dari PRISM, dengan ViewModelBase dari yayasan MVVM dan sebagainya. Saya juga men-tweak RelayCommand (DelegateCommand memanggil beberapa tempat) untuk menerima data lain juga, dan seterusnya.

Saya tidak akan merekomendasikan hanya satu kerangka per se.

Andrei Rînea
sumber
19
Dengan hormat saya tidak setuju, masalah dengan pendekatan ini akan muncul dengan sendirinya ketika Anda mendapatkan joiner baru - biaya masuk pada proyek akan jauh lebih tinggi karena dokumen internal biasanya bukan prioritas.
Florian Doyon
1
Saya dapat melihat poin tentang dokumentasi. Tetapi mungkin tidak ada kebutuhan untuk mengembangkan dokumen internal. Tautan ke situs eksternal dengan dokumentasi dapat dimasukkan ke dalam kode itu sendiri
Vasudevan Kannan
8

Taruhan saya adalah Caliburn dan MVVMlight, tampaknya tidak banyak kerangka kerja mvvm ini mendukung silverlight. Saya dapat meramalkan bahwa akan ada lebih banyak kerangka kerja MVVM untuk dipilih daripada kerangka kerja IoC, karena lebih sulit untuk mengatur batas fitur ke kerangka mvvm. Saya kira cara terbaik untuk mengetahui mana yang lebih sesuai dengan proyek Anda adalah dengan mendaftar / membandingkan fitur-fiturnya.

Lihat juga Mix10. Saya belajar banyak dari pembicaraan: membangun kerangka kerja mvvm Anda.

MCSean
sumber
4
Saya menemukan pembicaraan itu cukup bermanfaat. Berikut tautan langsung: live.visitmix.com/MIX10/Sessions/EX15
anshul
6

Juga kerangka kerja Cocktail dan DevForce oleh Ideablade

ramon22
sumber
4

Saya menggunakan Prism dan menyukainya. Salah satu hal besar bagi saya adalah bahwa akan ada orang lain di luar sana yang dapat membantu saya jika diperlukan dan teladan yang baik. Setelah Anda menjalankan dasar-dasarnya, ada banyak ekstensi yang Anda perlukan untuk aplikasi Anda dan itu jauh lebih mudah ketika Anda bekerja dengan kerangka kerja yang sama dengan yang lain.

dave
sumber
2

Semua dalam semua, saya 90% melalui aplikasi saya dan semua saya telah menggunakan MVVM Toolkit adalah fungsi pabrik yang membangun perintah untuk saya diberikan fungsi delegasi untuk diluncurkan di Execute. Saya pikir saya bisa beralih ke kerangka kerja lain atau kerangka tidak dalam beberapa jam.

mico
sumber
2

Satu lagi yang perlu dipertimbangkan adalah MEFedMVVM . Saya telah menggunakannya pada beberapa proyek dan ringan, tidak mengganggu dan mendukung Silverlight dan WPF. Itu juga dapat mendukung data waktu desain di Blend, bagi mereka yang menggunakan produk itu.

John Rayner
sumber
1

Jika Anda mencari Extensibility (kemampuan untuk menulis add-in) di atas kerangka aplikasi WPF / MVVM, maka Anda mungkin tertarik dengan penafian SoapBox Core : Saya menulisnya . Ini bersumber terbuka, jadi bahkan jika Anda tidak menggunakannya, mungkin ada beberapa ide bagus di sana untuk Anda. Ini menggunakan MEF untuk Extensibility dan IoC.

Scott Whitlock
sumber
1

Ada juga nRoute

Kerangka kerja aplikasi yang sangat bagus untuk WPF / Silverlight yang mendukung MVVM

Daniel O
sumber