WPF'deki MVVM eski mi? [kapalı]


18

Şu anda başımı WPF için MVVM'ye getirmeye çalışıyorum - kafamı konsept etrafında döndürmek istemiyorum, ama gerçek somunlar ve cıvataların etrafında, aptal CRUD'dan daha da fazla bir şey yapmanın civataları etrafında.

Fark ettiğim şey, birçok çerçevenin ve çoğu / tüm blog gönderilerinin 'çağlardan' önce olduğu.

Bu şimdi eski şapka olduğu ve blogcuların Sonraki Büyük Şey'e taşındığı için mi yoksa sadece söyleyecekleri her şeyi söyledikleri için mi?

Başka bir deyişle, burada özlediğim bir şey var mı?


1
WPF için MVVM Çerçeveleri güncellenmeye devam etmiştir. Sıcak yeni konu reaktif programlama [google it!] ReactiveUI aracılığıyla MVVM olarak kullanılabilir . En iyi 10 wpf nuget indirmesinin 3'ü MVVM çerçeveleridir: Prism.WPF, MvvmCross, Caliburn.Micro. AFAIK, bunların hepsi Xamarin.Forms ve UWP'yi de destekliyor, bu yüzden gelecek yıllar için geçerli olacak.
ToolmakerSteve

Yanıtlar:


7

MVVM modası geçmiş değil, ancak başlamak için fazla abartılıyor. Hiç hoşuma gitmedi ve beni WinForms'da çok uzun süre tuttu; ağaçlar için ormanı göremediğimde bebeği banyo suyuyla dışarı attım. Şimdi WPF alıyorum ve kodu biçimlendirme ile karıştırmak istememe fikrini alıyorum, ancak biçimlendirmeyi tek bir yere yapıştırma ve kodumdaki dökümlerle (hatta WPF'de de yapabilirsiniz) Android stilini tercih ediyorum. her ne sebeple olursa olsun bunu yapmak hiç moda olmadı).

Bu şekilde daha hassas kontrol elde edersiniz ve her yerdeki "değişmiş" taşıma konusunda endişelenmenize gerek kalmaz. Bunun aslında daha test edilebilir olduğunu düşünüyorum çünkü bir "değişmiş" olayı kaçırırsanız testler her zaman yakalanmayacaktır.

Bu günlerde bir eğilim gibi görünen biraz "deklaratif" -ness kaybedersiniz (örneğin, iki widget aynı değere eşlenirse, MVVM'de bunu yapabilirsiniz, ancak zorunlu kodla her ikisini de ayrı ayrı ayarlamanız gerekir) . Ancak MVVM ile bile, bu sadece menial durumda çalışır. Bazı widget'ın başka bir widget'ın günlüğünü göstermesi gerekiyorsa, başka bir işleyici ve başka bir "değişmiş" olay yazmanız gerekir ve böylece böyle olduğunu söylemek için "bildirim" tanımını genişletmek zorunda kalırsınız.

2015 güncellemesi

WPF MVVM, zamanı için evrimseldi. WPF gibi. Ama ikisinin de siğilleri vardı. Düz WPF çok fazla içine yerleştirilmişti (artı XML üzerine inşa edilmişti) ve başa çıkmak için bir tür acıydı. (Gerçekten, eğer WPF bir "çerçeve" yaklaşımından çok daha "kütüphane" yaklaşımını benimsemiş olsaydı, bu gerçekten harika şeyler haline gelmiş olabilir ve tüm teknoloji evreni artık tamamen farklı olabilirdi). Fikir MVVM harikaydı ama WPF içine MVVM uydurmaya çalışan 1) C # gerçekten Demirbaş bir sürü olmadan bunu ifade edemedikleri biraz hacky oldu ve modal pop-up gibi 2) WinForms emanetler hala ideolojik yaygın ama yapamadım MVVM'de kolayca temsil edilebilir. Böylece her şey emildi.

Bununla birlikte, LOB uygulamaları için şeffaflığa veya GPU'ya ihtiyaç duyduğunuzda hala Windows'daki tek gerçekçi seçenek.

Tepki elbette MVVM'yi eskimiş hale getirdi. VS2015'in yerel bir sayacı olmadığı için hayal kırıklığına uğradım. Şimdilik hala ham WPF kullanmaya devam ediyoruz (ki bu iyi, ama eski hissediyor (gerçekten şimdi winformlar kadar eski hissediyor ) ve bir ton yerleşik işlevsellik yok (harika ama terk edilmiş bir proje gibi hissediyor) veya bu noktada hiçbir şey için çok fazla yük gibi görünen MVVM ile, iyi MVVM (açısal 1) bile eksikliklerinden dolayı ortaya çıkmıştır.

WPF MVVM'den kaçınırım. Ekstra bir katman ve artık kimse umursamıyor.


3
Hmm .. Bunun bir din meselesi olduğunun farkındayım, ama WPF'de MVVM ile Cinch'i geri kullanarak başladım .. Mmm. 2010? Ve çok beğendim. O zamandan beri Caliburn.Micro ve Angular'a geçtim ve hala seviyorum - tabii ki, MVVM'de söylediğin gibi bir çok eksiklik var (belirgin olarak diyaloglar yapmak için hacky olmayan bir yol yok). MVVM oldukça ayrıntılı hissedebilir, ancak genel okunabilirlik ve açık ui-tasarım / uygulama boşluğu hala benim için değerlidir.
cwap

4
"React elbette MVVM'yi eskimiş hale getirdi" - ancak endüstrinin çoğu Angular kullanıyor.
Den

Masaüstü uygulamanızı web'e taşımaya karar verene kadar ve sahip olduğunuz tek şey, WPF kontrollerine bağlı bir ton kod arkasında.
CAD

1
Peki, React ve Angular bir JavaScript ortamı değil mi? Bunun WPF ile ne ilgisi var? Yoksa bir şey mi kaçırıyorum.
Berin Loritsch

1
@BerinLoritsch - bir şey eksik değil. Bu paragraf bu Soru-Cevap ile ilgisizdir; görünüşe göre Dax, WPF'den web programlamaya "geçti". Elmalar ve Portakallar.
ToolmakerSteve

3

Tüm söylenen ve yapılan, bir MVVM çerçevesi ile yapabilecekleriniz için bir sınır var.

WPF, Microsoft'un piyasaya sürülmesinden bu yana devam etmediği için "bitti". Teknolojide güncellemeler olsaydı, kütüphanelerin de güncellenmesi gerekecekti. Bu olmadı.


Yani 'güncel değil' WPF mi? İlk cümlenizle ilgili olarak: gerçek hayatta kullanıcı arayüzü ve kodun gerçekçi bir teklif yapmak için çok fazla iç içe olması ya da
WPF'deki

4
@Benjol - Microsoft'un WPF'den vazgeçtiği anlaşılıyor (veya en azından artık teknolojiyi güncellemiyor). MVVM çerçeveleri ile ilgili düşüncem, amaçlanan amaçları için bunları eski bir platformda sürdürmek ve genişletmek için çok az şey olmasıdır. Microsoft'un neden WPF'yi güncellemeyi bıraktığını bilmiyorum, ancak önerdiğiniz şey olduğundan şüpheliyim - Windows 8 ve RT'nin kaynakları WPF'den uzaklaştırması daha olasıdır.
Oded

19
Bu doğru değil. WPF .NET 4.5, en son, birkaç kez güncellendi: msdn.microsoft.com/en-us/library/bb613588.aspx
17 26

3
MS'in geliştirici teknolojilerini sonsuza dek desteklediğini de belirtmek gerekir. 1992'de piyasaya sürülen MFC, Visual Studio'nun her yayın / hizmet paketinde hata düzeltmeleri almaya devam ediyor.
17 of 26

5
Hatta WPF'ye son zamanlarda yapılan eklemelerin eksikliğinin olgunluğunun bir göstergesi olduğunu iddia ettim. Ayrıca, @Oded'in zaten değindiği gibi, masaüstü uygulamaları hala değerlerine sahipken, artık mobil uygulamalarla değiştiriliyor. Yine de, WPF'nin başlattığı şeylerin çoğunun (bildirimsel UI programlama, MVVM, Bağımlılık Özellikleri ve Veri Bağlama) artık WinRT ve Web teknolojilerinde (çoklu JS çerçeveleri) yaşadığını belirtmek gerekir. Bunlar, alanı önemli ölçüde geliştiren temel değerlerdir ve uzun süre yapmaya devam edeceklerine inanıyorum.
Sebastian
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.