MVVM için hangi çerçeveyi kullanmalıyım? [kapalı]


233

MVVM modeliyle bir uygulama geliştiriyorum, ancak hangi çerçeveyi kullanacağımı seçmem gereken bir noktaya geldim.

Olası seçenekler arasında:

  • MVVM Araç Kiti
  • MVVM Vakfı
  • WPF Uygulama Çerçevesi (WAF)
  • Hafif MVVM
  • Caliburn
  • çocuk oyuncağı
  • Prizma
  • ReactiveUI

Deneyiminizde hangisi daha iyi?


14
+1 - Güzel soru, ama lütfen 'daha iyi' açıklığa kavuşturun. Farklı çerçeveler farklı avantajlar sağlar, en iyi gereksinimlerinize bağlıdır. Cevapları dört gözle bekliyoruz :)
Russell

WPF ve Silverlight ile ve minimum öğrenme eğrisiyle kullanabilmeniz çok iyi olurdu.
Rangel

2
Caliburn'a da göz atmak isteyebilirsiniz. codeplex.com/caliburn
Kent Boogaart

Üzgünüm Kent. Caliburn'u nasıl unutabilirim?
Pete OHanlon

2
Yakın ve eski ama ... Bileşen desteğine ihtiyaç duyduğum için ilk projemi Prism (aşağıdaki cevap) kullanarak yaptım. Son projem ham yaptım - hiç çerçeve yok. Tek ihtiyacınız olan bir komut sınıfı ve MVVM'yi çerçevesiz yapabilirsiniz - elde edebileceğiniz kadar hafif bir ağırlık.
dave

Yanıtlar:


194

Gerçekten neyi başarmaya çalıştığınıza ve halihazırda ne kadar altyapı istediğinize ve size yardımcı olan örnekleri bulabilme kolaylığına bağlıdır. Burada bir ilgi beyan edeceğim, çünkü en az bir MVVM çerçevesine aktif olarak katıldım ve WPF Disciples grubu aracılığıyla başkalarına girdim, bu yüzden biraz önyargılıyım. Söyleyerek, işte gidiyor:

Microsofts MVVM Toolkit - bu alfa aşamalarında hala çok fazla. Başlangıçta serbest bırakıldığında, yapmadığı şeylerden dolayı Disciples'ten bir vahşilik aldı. Bunu söyleyerek, MS bu çerçeveyi güçlendirmek istiyor, bu yüzden izlemek için bir tane - henüz hazır değil.

MVVM Vakfı - ah Josh Smith'in çerçevenin versiyonu. Josh, MVVM'nin babalarından biridir ve örüntünün büyük bir savunucusu ve öğretmeni olmuştur. Sonuç olarak, diğer çerçevelerde bulacağınız şeylerin çoğunda Josh'un parmak izleri var. Bu çerçevenin MVVM'nin temellerini sağlaması ve daha ezoterik sorunlardan bazılarını ele almaması amaçlanmıştır. Başlangıçta bu sadece WPF için tasarlandı, ancak Laurent Bugnion ve ben gibi insanlar bunun Silverlight uyumlu bir çerçeve olacağı anlamına gelen işlevsellik / projeler eklediler.

WAF - deneyim yok, bu yüzden bu konuda yorum yapamam korkarım.

MVVM Light - Laurent Bugnion bunu üstlendi ve sadece sürüm 2'ye güncellendi. Bu çok iyi bir çerçevedir, ancak yine MVVM uygulamalarının her yönünü kapsaması amaçlanmamıştır. Laurent'in geçmişi göz önüne alındığında, içinde çok güçlü Silverlight ve Blendability desteği var.

Laurent Güncellemesi bana .NET 3.5 ve .NET 4.0 sürümlerinin özelliklerle uyumlu olduğunu bildirdi. Laurent'e gitmek için sabırsızlanıyorum.

Cinch - Sacha Barber'ın mükemmel WPF sadece MVVM çerçevesi. Bu, yukarıda bahsettiğim çerçevelerden daha fazla zemini kapsıyor. Mükemmel bir çerçeve ve Bill Kempf'in mükemmel Onyx projesinde yer alan konseptlerden faydalanıyor . Onyx, MVVM çerçevelerini tamamlamaya yöneliktir ve insanların MVVM / WPF'de yapması genellikle zor olan işlevsellik ekler. Yine, başlangıçta sadece WPF olması amaçlanan Onyx, SL uyumluluğunu da dahil etti - özellikle gurur duyduğum iş.

Prizma - Yine, hiç kullanmadım, ama bunun hakkında çok iyi şeyler duydum.

Okyanus - Cider ekibi Program Yöneticisi Karl Shifflett kısa süre önce tam özellikli bir WPF MVVM çerçevesi yayınladı. Yine, bu mükemmel bir çerçeve ve tavsiye için çok şey var.

Sonuç olarak, farklı çerçeveleri indirmek onlara bir göz atın ve hangisinin düşündüğünüze ve gereksinimlerinize en uygun olduğunu düşünün. Aynı kod tabanından Silverlight'ı desteklemek isteyebileceğinizi düşünüyorsanız, yalnızca WPF çerçeveleri indirilmelidir.


4
Yazdığımız bir tane kullanıyorum çünkü MVVM için çok özel ihtiyaçlarımız var. Josh'un yaptığı işten büyük ölçüde etkileniyor ve yakın gelecekte Açık Kaynak olarak yayınlayacağım (tescilli bitleri sökmekle meşgulüm). Buna Goldlight deniyor.
Pete OHanlon

Bununla birlikte, veri erişim katmanı çerçeveniz nedir? çocuklar .. LINQ, LLBLGen, EF, nHibernate?
Jirapong

Projeye ve gereksinimlere bağlıdır. Bazen LINQ, bazen NHibernate, bazen Castle ActiveRecord ve bazen eXpress Kalıcı Nesneler kullanıyoruz.
Pete OHanlon

3
Merhaba Pete, sadece MVVM Light Toolkit'in Silverlight 3 ve Silverlight 4 için olduğu gibi WPF 3.5 ve WPF 4 için de aynı şekilde çalıştığını yorumlamak istiyorum. Blendability hakkında haklısın, bu benim için büyük bir endişe :) Şerefe, Laurent
LBugnion 16:08

1
MVVM Toolkit'in Visual Studio 2010 ile çalışacak şekilde güncellenmediğinden hayal kırıklığına uğradım. Bunu karar verme sürecine eklemek isteyebilirim. 2010 yılında MVVM şablonlarını kullanarak tanıdığım çoğu insan MVVM Light kullanıyor ve bazıları sadece bu nedenle buna taşındı.
ScottCher

54

Bu makaleyi çok yararlı buldum http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Buraya gelecek kullanıcılar için getirdim

Cinch bölümünü güncelliyor ve özelliklerine silverlight desteği ekliyorum

Uzun hikaye için özür dilerim

Ortak özellikler:

• ViewModelBase sınıfı (INotifyPropertyChanged arabiriminin uygulanması için)

• UI komutunu ViewModel işleyicilerine bağlamak için sınıf gibi RelayCommand

• Birim testleri çerçeve ile birlikte gelir

çocuk oyuncağı

• Yazar: Sacha Barber

• Silverlight desteği: hayır (Cinch sürüm 2 Silverlight'ı destekler)

• Dokümantasyon: mükemmel, CodeProject'te yayınlanan 6 makale

• Barındırma: CodePlex

• Lisans: Kod Projesi Açık Lisansı

• Özellikleri:

  1. ekli davranışlar

  2. IDataErrorInfo kullanarak doğrulama

  3. IEditableObject desteği

  4. zayıf etkinlik oluşturma ve abonelik

  5. zayıf olaylar kullanarak arabulucu mesajlaşması

  6. IOC / DI desteği (Unity kullanarak)

  7. hizmetler: olay kaydedici, mesaj kutusu, açık kaydet iletişim kutusu, açılır pencere

  8. diş yardımcıları

  9. menü öğeleri için destek

  10. kapatılabilir görünüm modelleri

  11. MVVM kod üreteci

MVVM Işık Araç Seti

• Yazar: Laurent Bugnion

• Silverlight desteği: evet

• Dokümantasyon: Laurent'in blogunda ve diğer geliştiricilerin birçok makalesinde mevcut

• Barındırma: CodePlex

• Lisans: MIT lisansı

• Özellikleri:

  1. MSI yükleyici

  2. VS projesi ve öğe şablonu

  3. VS kod parçacıkları

  4. Modeller arası iletişim için Messenger sistemi

  5. Olayları komut olarak işleme

MVVM Yardımcıları

• Yazar: Mark Smith

• Silverlight desteği: hayır

• Belgeler: Mark'ın blogundaki bazı makaleler

• Barındırma: kişisel web sitesi

• Lisans: tanımlanmamış

• Özellikleri:

  1. ekli davranışlar

  2. biçimlendirme uzantısını kullanarak viewmodel oluşturma

  3. özniteliğe dayalı doğrulama

  4. ServiceProvider yaklaşımını kullanan IOC / DI

  5. kapatılabilir görünüm

  6. bekleme imleci (yeni WaitCursor () kullanarak {// kodunuzu buraya ekleyin})

MVVM Vakfı

• Yazar: Josh Smith

• Silverlight desteği: hayır

• Dokümantasyon: Josh veya Marlon Grech'in blogunda Messenger uygulamasıyla ilgili makaleler

• Barındırma: CodePlex

• Lisans: MS-PL

• Özellikleri:

  1. Modeller arası iletişim için Messenger sistemi

  2. PropertyChanged olay izleyicisi

Caliburn

• Yazar: Rob Eisenberg

• Silverlight desteği: evet

• Dokümantasyon: eksiksiz çevrimiçi dokümantasyon mevcut

• Barındırma: CodePlex http://www.codeplex.com/caliburn

• Lisans: MIT lisansı

• Özellikleri:

  1. Komutlar, İşlemler üzerine inşa edilir ve böylece birden fazla giriş parametresi, filtre ve otomatik eşzamansız çalıştırma da dahil olmak üzere aynı özelliklerin çoğunu paylaşır.

  2. çeşitli kullanıcı arayüzü bileşenleri için etkinleştirme, devre dışı bırakma ve kapatma semantiği gibi UI yaşam döngüsü sorununu ele alan sunucular

  3. Caliburn uygulamaları tamamen test edilebilir

  4. arka plan görev yöneticisi gibi çeşitli yardımcı programlar

  5. çeşitli UI desenlerini destekler (yalnızca MVVM değil)

  6. bağımlılık enjeksiyon kabı

Oniks

• Yazar: William e Kempf

• Silverlight desteği: hayır

• Dokümantasyon: CodePlex'te temel tanıtım

• Barındırma: CodePlex

• Lisans: belirtilmedi

• Özellikleri:

  1. ServiceLocator düzeni

  2. Özel bir biçimlendirme uzantısı kullanarak ViewModel oluşturma

  3. IDisplayMessage gibi UI ile ilgili hizmetler

Kalsiyum

• Yazar: Daniel Vaughan

• Silverlight desteği: hayır

• Dokümantasyon: CodeProject ile ilgili 2 çok ayrıntılı makale (bölüm1 ve bölüm2)

• Barındırma: CodePlex

• Lisans: telif hakkını kullanın, kopyalayın, değiştirin ve / veya dağıtın ve saklayın!

• Özellikleri:

  1. Çalışma zamanında modüllerin etkinleştirilmesi veya devre dışı bırakılması için Modül Yöneticisi

  2. aynı API'yı kullanarak istemciden veya sunucudan kullanıcıyla etkileşim kurmak için mesajlaşma hizmetleri

  3. WPF ICommands'ı yalnızca etkin bir görünüm veya viewmodel arabirimi uyguladığında etkinleşen içerik arabirimleriyle ilişkilendirmek için Komut Hizmeti

  4. Araç Çubukları ve Menüler için Bölge Adaptörleri

  5. Kullanıma hazır çalışmaya hazır istemci-sunucu günlüğü

  6. Web Tarayıcısı, Metin Düzenleyici, Çıktı Penceresi ve daha pek çok modül içerir

  7. Kirli dosya göstergeli sekmeli arayüz (modüller arasında yeniden kullanılabilir)

nRoute

• Yazar: Rishi

• Silverlight desteği: evet

• Belgeler: yazarın blogunda yer alan birçok makale (bağlantılar için CodePlex projesi ana sayfasına bakın)

• Barındırma: CodePlex

• Lisans: MS-PL

• Özellikleri:

  1. Blend3 davranışlarını destekler ve modelleri tetikler

  2. kaynak bulma çerçevesi

  3. hizmetleri görüntüle: OpenFileDialog, ShowMessage…

  4. View ve ViewModel'i birlikte eşlemek için nitelikleri kullanır

Nito MVVM

• Yazar: Shammah

• Silverlight desteği: hayır

• Dokümantasyon: hayır

• Barındırma: CodePlex

• Lisans: belirtilmedi

• Özellikleri:

  1. ICommand arayüzünün çeşitli MVVM dostu uygulamaları

Okyanus

• Yazar: Karl Shifflet

• Silverlight desteği: hayır

• Belgeler: Karl'ın blogunda yer alan makaleler

• Barındırma: kişisel web sitesi

• Lisans: belirtilmedi

• Özellikleri:

  1. VB.Net'te yazılmış

  2. özniteliğe dayalı doğrulama

  3. viewmodel temel sınıfları: aktarma komodini, kapatılabilir görüntü modeli ...

  4. SQL sunucusu veri erişim katmanı

Temel MVVM çerçevesi

• Yazar: Lester Lobo

• Silverlight desteği: hayır

• Dokümantasyon: Kütüphane ile birlikte örnek uygulama

• Barındırma: CodePlex

• Lisans: MS-PL

• Özellikleri:

  1. Yetkilendirme Komutları \ Tuş Bağlama

  2. VM'ler arasında mesajlaşma

  3. olayları ekli davranışları olan komutlar olarak işleme

  4. diyalogları (ve daha fazlasını) hizmet olarak işleme

  5. VS kod parçacıkları

İyi ışık

• Yazar: Peter O'Hanlon • Silverlight desteği: evet

• Dokümantasyon: Kütüphane ile birlikte örnek uygulama

• Barındırma: CodePlex

• Lisans: MS-PL

• Özellikleri:

  1. “Çalışma alanı” yönetimi (kapatılabilecek belge seti)

  2. cilt desteği

  3. VM'ler arasında mesajlaşma


Harika gönderi. Cinch sürüm 2'nin Silverlight'ı desteklediğini eklemeyi düşündüm.
Kildareflare

44

Pete'nin büyük cevabında eksik olan Çerçeveleri tarif etmeye çalışıyorum:

MVVM Toolkit (Microsoft) , bu kalıpla yeni başlayanları desteklemesi gereken Visual Studio proje şablonlarına sahip çok hafif bir kütüphanedir. Microsoft, Araç Kitleri için iyi geribildirim alırsa, bunu yeni bir Visual Studio (belki 2010) proje şablonu olarak uygulayabilirler.

Prizma (Microsoft p & p) , MVVM modeli için destekten daha fazlasını sağlayan bir çerçevedir. Bu projenin temel amacı modüler WPF ve / veya Silverlight uygulamalarıgeliştirmenize yardımcı olmaktır. Sadece MVVM desenini uygulamanız gerektiğinde veya .NET / WPF'de yeni başlayan biriyseniz bu projeyi tavsiye etmeyeceğim. Ayrıca bkz: Bağlantı .

WPF Uygulama Çerçevesi (WAF) , MVVM ile WPF uygulamaları oluşturmanıza yardımcı olan hafif bir çerçevedir. Sadece WPF içindir ve Silverlight'ı desteklemez. Denetleyicilerin tanıtımı ile diğer MVVM çerçevelerinin çoğundan biraz daha farklı bir yol kat ediyor. Uygulama iş akışından sorumludurlar ve çeşitli ViewModeller arasında aracılık yaparlar.


19

Meh. Mvvm gerçekten IMO'yu desteklemek için tam bir çerçeve gerektirmez. Kavramı anlarsanız, INotify'ı uygulayan temiz bir VM taban sınıfıyla başlamak ve oradan gitmek oldukça basittir.


4
Birçok geliştiricinin mvvm kütüphanesi geliştirmesinin bir nedeni vardır. Söyledikleriniz doğruysa, bu geliştiriciler neden zamanlarını boşa harcıyor? Bu çerçeveler kullanıcıları neden en sevdikleri mvvm çerçevesini kullanmaya devam edecek? Doğru, "Mvvm gerçekten IMO'yu desteklemek için tam bir çerçeve gerektirmez". Ancak MVVM çerçevesi olmadan yapmak pratik değildir.
Syaiful Nizam Yahya

3
-1 IMO, ICommands için kendi RelayCommand sınıfınızı, VM arası iletişim için bir Messenger sınıfı ve iyi çalışan bir WPF uygulaması için gereken en temel araçlardan bahsetmek için kendi IoC kapsayınızı yazıyor, önemli bir PITA'dır. Cevabınız yalnızca en basit programlar için geçerlidir.
Heliac


10

Kendi karıştırın!

MVVM temelinden ViewModelBase ve benzeri PRISM'den EventAggregator kullandım. Ben de diğer verileri kabul etmek için RelayCommand (bazı yerlerde çağrılan DelegateCommand) ve böylece tweaked.

Ben sadece bir çerçeve başına tavsiye etmem.


19
Saygıyla katılmıyorum, bu yaklaşımla ilgili sorun yeni katılımcılar elde ettiğinizde kendini ortaya çıkaracaktır - kurum içi dokümanlar genellikle öncelikli olmadığından projeye giriş maliyeti çok daha yüksek olacaktır.
Florian Doyon

1
Ben kendisini kodu gömülebilir belgelerle harici sitelere içi docs.Links geliştirme ihtiyacı olmayabilir documentation.But hakkında noktasını görebilirsiniz
Vasudevan Kannan

8

Bahisim Caliburn ve MVVMlight'ta olacak, bu mvvm çerçevelerinin çoğunun gümüş ışığı desteklemediği anlaşılıyor. IoV çerçevelerinden daha fazla MVVM çerçevesinin seçileceğini öngörebilirim, çünkü mvvm çerçevesinin özellik sınırını ayarlamak daha zordur. Sanırım özelliklerini listeleyerek / karşılaştırarak projenizin hangisine daha uygun olduğunu bulmanın en iyi yolu.

Ayrıca Mix10'a da göz atın. Konuşmadan çok şey öğreniyorum: mvvm çerçevenizi oluşturmak.


4
Bu konuşmayı oldukça faydalı buldum. İşte doğrudan bir bağlantı var: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

Prism kullanıyorum ve beğendim. Benim için en önemli şeylerden biri, gerekirse bana yardım edebilecek başka insanlar ve iyi örnekler olmasıydı. Temel özellikleri çalıştırdıktan sonra, uygulamanız için ihtiyacınız olacak bir sürü uzantı var ve diğerleriyle aynı çerçeveyle çalışırken çok daha kolay.


2

Sonuç olarak, benim uygulama aracılığıyla% 90 ve MVVM Toolkit kullandığım tüm Execute başlatmak için bir temsilci fonksiyonu verilen benim için bir komut oluşturur fabrika işlevidir. Sanırım birkaç saat içinde başka bir çerçeveye geçebilirim.


2

Dikkate alınması gereken bir diğeri ise MEFedMVVM'dir . Birkaç projede kullandım ve hafif, müdahaleci olmayan ve Silverlight ve WPF'yi destekliyor. Ayrıca, bu ürünü kullananlar için Blend'deki tasarım zamanı verilerini de destekleyebilir.


1

WPF / MVVM uygulama çerçevesinin üzerinde Genişletilebilirlik (eklenti yazma yeteneği) arıyorsanız, SoapBox Core yasal uyarısı ile ilgileniyor olabilirsiniz: Yazdım . Açık kaynaklı, bu yüzden kullanmasanız bile, orada sizin için bazı iyi fikirler olabilir. Hem Genişletilebilirlik hem de IoC için MEF kullanır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.