WPF vs. WinForms - Delphi programcısının bakış açısı?


38

WPF ve WinForms'daki ana konuların çoğunu okudum ve kendimi denenmiş ve gerçek önceki teknoloji (Winforms) ile halefi (WPF) arasında karar verirken düşebileceğiniz talihsiz belirsizlik içinde sıkışıp kaldım.

Sonunda C # 'ya atlatan yılların tecrübeli bir Delphi programcısıyım. Delphi program arkadaşlarım, Delphi şöhretinden Anders Hejlsberg'in C # 'un mimarı olduğunu bilmekten heyecan duyduğumu anlayacaklar. Delphi'nin VCL özel bileşenlerine, özellikle de çok adımlı sihirbazlar ve alt bileşenler için bir kap olarak görev yapan bileşenler yapmaya dahil olanlar dahil, güçlü bir bağımlılığım var.

Bu arkaplanla, Delphi'den C # 'ya geçiş yapanların, ilk uygulamalarımı yazmak için WinForms vs. WPF kararımda bana yardımcı olabileceklerini umuyorum. Unutmayın, kodlama ve tam teşekküllü otomatik tamamlama ve uygun hata ayıklama desteği gibi şeyler, API özellikleri ve çağrıları hakkında kolayca ulaşılabilir bilgiler bulabilmenin yanı sıra, hatalar için geçici çözümler bulabilmem için çok sabırsızım. .

2009 başlarının başındaki SO konuları ve yorumları, C # UI geliştirme kodlamamın üstesinden gelebilecek potansiyel sıkıntılara gelince, bana WPF konusunda büyük endişe veriyor. Öte yandan, kısa bir süre sonra değiştirilmeksizin (WinForms) eşit derecede rahatsız edici olan bir API tekniğini öğrenmek için yanlış bir zaman harcamak eşit derecede sıkıntılı ve WPF verimsizleştirmede GPU desteğini buluyorum.

Bu yüzden kararsızlığım. Her iki teknolojiyi de öğrenemediğim için, yeni bir başlangıç ​​yapmak için nadir bir fırsatım var ve büyük bir "öğrenimsiz" eğrisiyle yüzleşmek zorunda kalmıyorum. Bir WinForms programcısı WPF'ye geçtiğinde, insanların çeşitli konulardan bahsettiğini gördüm. Öte yandan, WPF kullanmak benim için çok sinir bozucu olacak ya da kendim gibi sabırsız bir RAD geliştiricisi için diğer önemli olumsuz sonuçları doğuracaksa, WPF aynı destek seviyesine ve kullanım kolaylığına ulaşana kadar sadece WinForms'a bağlı kalacağım. Bir programcı olarak psikolojime somut bir örnek vermek için, VB'yi ve ardından Delphi'yi, birçok geliştiricinin Windows uygulamalarını geliştirirken yaşadığı bir Windows UI kütüphanesi olan MFC ile kodlamanın gerçek acılarını tamamen önlemek için kullandım. MFC'den kaçındığım için şansımdan asla pişmanlık duymadım.

Anders Hejlsberg'in WPF ve / veya WinForms mimarisinde bir eli olup olmadığını ve her iki kod tabanında da yaratıcı görüş ve kullanım kolaylığı konusunda herhangi bir farklılık olup olmadığını bilmek de rahatlatıcı olurdu. Son olarak, Delphi programcıları için tekrar WPF kullanırken WinForms'a karşı özellikle de hata ayıklayıcı desteği söz konusu olduğunda ne kadar "IDE schock" kullandığımı bana bildirin. 2011 için güncellenen iş piyasası yorumları da takdir edilecektir.


2
WPF'nin düşük performans için gerçekten kötü bir ünü yok mu?
David Heffernan

9
@David: Gerçekten de bu şöhreti var, ama her zamanki gibi, gerçeklik rap kadar kötü değil. Visual Studio 2010’un GUI’si WPF’de yeniden yazılmıştı ve çoğu makinede VS 2008’e kıyasla gözle görülür bir hız düşüşü görülmedi. özellikle bir Delphi dönüştürmek için. Ama ben bunu cevaplamak için tereddüt etmem için biraz tereddüt ediyorum. Herkes buna karşı cehenneme döndü, çünkü "eski" teknoloji, sanki bir anlamı varmış gibi.
Cody Gray

@Cody. Anladım. Cevaplar ve yorumlar konusunda harika bilgiler alıyorum, ancak WPF hakkında daha doğrudan bilgi almayı umuyorum ve bu hata ayıklayıcı desteği ile WinForms ve bazı iş piyasası bilgileri. Bu konu alanlarındaki sorularıma cevaplar hala aranıyor.
Robert Oschler

1
@CodyGray: Şaka yapıyor olmalısınız. VS2010, VS2008'den yüz kat daha yavaştır ve WPF'dir. İzleniminiz muhtemelen olağan programcının önyargısından kaynaklanmaktadır: Yalnızca çoğu normal kullanıcının sahip olmadığı en yeni üst düzey makinelere bakarsınız.
Timwi

Yanıtlar:


20

Delphi geçmişiniz varsa, WinForms'ta hayal kırıklığına uğrayacaksınız. VCL'de kolay olan şeyleri yapmaya çalışacaksınız, yalnızca acı verici zor olduklarını, hatta imkansız olduklarını bulmak için. WPF daha az sınırlayıcı olacaktır.

Örneğin, işte karşılaştığımız WinForms sınırlamalarından sadece birkaçı:

  • WinForms'ın TAction ile hiçbir ilgisi yoktur, bu nedenle eylemlerle kodlamaya alışırsanız, bir menü öğesi ile bir araç çubuğu düğmesi ve bir sağ tıklama menüsü arasında aynı metni ve simgeyi paylaşıyorsanız, etkinleştirme mantığını merkezileştirme ve etkin durumun güncellenmesi OnUpdate ile arka planda ... tüm bu zor ve hataya açık şekilde yapmanız gereken WinForms'dan nefret edersiniz.
  • WinForms'ın eski (.NET 1.0 bağbozumu) MainMenu, menü öğelerinin yanındaki görüntüleri desteklemez ve yeni (.NET 2.0'da tanıtılan) MenuStrip, Microsoft'un düzeltmeyi reddettiği hatalarla doludur (hata düzeltmeleri geriye dönük uyumluluktan kaynaklanabilir).
  • TreeView gibi birçok kontrol, VCL meslektaşlarına kıyasla çok acı çekiyor (acı verici bir şekilde yavaş, mal sahibi çekme, birçok özelleştirme seçeneği, vb.)
  • Delphi'de alışkın olduğunuz üçüncü taraf kontrol geliştiricileri topluluğuna benzeyen hiçbir şey yok. Orada kalite kontrol kütüphaneleri var, ama onlar için para ödüyorsunuz - VirtualTreeView gibi ücretsiz teklifler WinForms için orada değil.

WPF, bazı açılardan WinForms'dan biraz daha fazla çıplak kemiktir, ancak son derece genişletilebilirdir.

  • TAction gibi bir şey ister misin? WPF, alıştığınız kadar zengin olan ICommand'a sahiptir (ancak Josh Smith'in MVVM makalesini okuduğunuzdan emin olun - normalde durum değiştiğinde komutlarınızı manuel olarak etkinleştirmeniz / devre dışı bırakmanız gerekir, ancak sürümü otomatik olarak kodunuzu etkinleştirir. OnUpdate ile alıştığınız gibi arka planda).
  • Menülerde görüntüler ister misiniz? Bu yerleşiktir (ve WinForms'daki kadar büyük bir cihaza yakın değildir).
  • WinForms bazı önemli kontrollerde mal sahibi çekilmesini kaldırır, ancak bunun yerine WPF kullanıyorsanız, mal sahibi çekilmesine gerek yoktur - TreeView düğümlerinin siyah metnin ardından parantez içinde mavi bir sayı olmasını istiyorsanız, DataTemplate'inize koyun ve çalışır, çirkin bir sahibi-çekme kodu gerekmez.
  • Üçüncü taraf kontrolleri ister misin? Birçok durumda, onlara ihtiyacınız yoktur, çünkü WinForms ve evet, VCL geliştiricileri sadece hayal edebilecekleri şekilde var olanı genişletebilirsiniz.

WPF'nin çok dik bir öğrenme eğrisi var, ancak iyi bir kitap alırsanız (örneğin, " WPF 4 Unleashed "), sizi en kötüsünden kurtarmanıza yardımcı olur - ve bu çerçeveyle çalışmaktan memnuniyet duyarsınız. seni WinForms'ın yapacağı gibi engellemeyecek.


1
Doğrudan Delphi yorum için teşekkürler. Herhangi bir iş piyasası yorumu ve VS 2010'un WPF için hata ayıklayıcı desteği ile ilgili herhangi bir bilgi, özellikle de izleme / inceleme sorunları? Bağlandığın kitabı kontrol edeceğim.
Robert Oschler

1
İş piyasası hakkında bilmiyorum. Hata ayıklayıcınıza gelince, pencerenizin kurucusu bir istisna atarsa, hayal kırıklığı bekleyin, çünkü hata ayıklayıcı size yığın izlemesi yapmakta isteksiz olacaktır - ancak tek yapmanız gereken hata ayıklayıcının istisna ayrıntıları iletişim kutusunda iki düzey InnerException kazmak. Bağlamalarınız çalışmazsa, hata ayıklayıcının altında koşun ve ciltleme hatalarını görmek için Çıktı penceresine bakın. Bunun dışında, endişelerin neler olduğundan emin değilim. WPF benim tecrübelerime dayanarak hata ayıklıyor ve MVVM, kullanıcı arayüzü mantığınızı WinForms'da olduğundan daha fazla test etmenize olanak tanıyor.
Joe White

6
Çok dik bir öğrenme eğrisi. WPF'de çok fazla program yok; WPF'yi istediğinizi yapmaya nasıl ikna edeceğiniz hakkında sorular sorarsınız.
Ian Boyd

Aslında, en büyük engellerden bazıları, sadece kör bir şekilde her şeyin TKitchenSink'ten kaynaklanmasından ziyade sorumlulukları doğru şekilde ayıran bir çerçeveyle çalışmayı öğrenmekle ilgilidir.
Joe White

1
Delphi formları alabilir miyim, ama C # dilini tutabilir miyim? Lütfen?
Robert Harvey,

13

İnsanlara WPF ile iyi bir deneyim yaşamadıklarını söyleyenlere çok şaşırdım. C ++ / MFC'den C # / WinForms'a C # / WPF olan bir geliştiriciyim. WinForms’tan WPF’ye geçiş kolay değildi, çünkü XAML öğrenmek çok kolay değil ama bir kez anladığınızda harika bir teknoloji. Birincisi, WinForms'a geri dönemem. WPF sadece harika.

Beni rahatsız eden diğer şey, insanların normalde WPF'yi sadece UI ile ilişkilendirme şeklidir. UI tasarım kolaylığı açısından bence WinForms'dan 100 kat daha iyi, ancak WPF'yi kullanmayı seveceğiniz başka nedenler de var:

  1. UI, elbette.
  2. Bağlamaları. Sadece düz sihir. Kullanıcı arayüzünden sonra en güçlü özellik. LOB uygulamaları bundan en fazla yararlanıyor.
  3. Komutları.
  4. Kaygıların ayrılması. Tasarımcılar tasarım, programcılar programı üzerinde çalışırlar.
  5. Ekli özellikler Üçüncü taraf kontrollerinin işlevselliğini kaynak kodu olmadan genişletebilirsiniz (ancak bu nokta ilk noktanın bir parçası olabilir).
  6. Silverlight'a kolay geçiş (Hem web hem de WP7)

WPF'yi öğrenmenin bir nedeni olarak son nokta konusunda benimle aynı fikirde olmayabilirsin, ama bana sorarsan, en büyüklerinden biri. WPF öğrenirseniz, Silverlight'a kolayca geçiş yapabilirsiniz. Silverlight büyüyor ve aynı zamanda harika bir teknoloji.

Ve en büyük sebep, gelecek. Silverlight ile birleştirilebilir ancak yetenekler aynı kalır.

Bu yüzden, WPF yoluna gitmenizi şiddetle tavsiye edeceğim.


1
Ben katılmıyorum demiyorum ama Tüm bu nedenlerle UI ilişkilidir (diyorsunuz gerçi o beni sadece UI ile nasıl insanlar normalde ilişkilendirmek WPF olan rahatsız ediyor başka bir şey )
Ed S.

1
+1 çünkü tüm puanlarınıza katılıyorum. WPF veya Winforms'u öğrenmek istersem seçim yapmalıyım ve WPF'yi seçtim ve asla pişman olmadım. @Ed: Bunlardan hiçbirini, birincisi dışında kesinlikle kullanıcı arayüzü ile ilgili olarak görmüyorum.
Rachel,

1
@Rachel: Gerçekten mi? Bir özellik değeri değiştiğinde kullanıcı arayüzünü güncellemek için ciltleme kullanılır. 4 numaralı konudaki endişelerin ayrılması açıkça yalnızca bir kullanıcı arayüzü geliştirirken uygulanır. # 5, üçüncü taraf kontrolleriyle ilgili. Kullanıcı arayüzü yok, kontrol yok. # 6 yine bir silverlight UI'ye çevirmekle ilgilidir. Bir şey mi eksik?
Ed S.

3
Ben aşağı yukarı zıt yoldan gittim: WPF -> WinForms -> C ++ / MFC. Evet, ben bir asiyim; Ben yüzüşte yüzerim. Sadece WPF'nin kullanıcı arayüzüne getirdiği şeylerle ilgili çekici bir şey görmüyorum. Bir sürü korkunç, yerel olmayan görünen yazılım benim "ilerleme" fikrim değil. Bunun ötesinde, birçoğunun (bu cevap dahil) WPF ile ilişkilendirdiği tasarım desenlerinin WPF'e nasıl özel olduğunu bilmiyorum. Tasarım desenlerini herhangi bir dilde veya GUI çerçevesinde kullanabilirsiniz. Aradaki fark basitçe mecbur edilmezseniz , insanlar olmaz mı? Silverlight'a geçiş kolaylığı, buradaki tek zorlayıcı sebep.
Cody Gray

5
Bir WPF uygulamasıyla ilk görevim: bir araç çubuğunu bırakın, 14 alçak yapın. tamam olamaz . İkinci görev: form fontunu kullanıcının font yüzüne ve boyutuna uyacak şekilde ayarlayın. yapılamaz Üçüncü adım: ciltleme yapılmadan liste görünümüne öğe ekleme işlemi yapılamaz .
Ian Boyd

5

Açıkçası WPF gelecekte düşünmeye gitmenin yolu. Mastering zor, ama platform çok iyi mimarlık ve esnektir.

Birkaç tavsiye:

  • Kolay başlayın: İlk projenizi yalnızca MVVM veya süslü animasyonlar kullanarak uygulamaya çalışmayın. Windows, düğme ve listelerle basit bir şekilde başlayın.
  • DataBinding'den yararlanın.
  • Adam Nathan tarafından Unleashed WPF kitabını satın alın .

+1. Pratik Cevap İlk projenizi sadece MVVM ya da süslü animasyonlar kullanarak gerçekleştirmemeye çalışın
Karthik Sreenivasan

4

Daha önce bol bol winform kullanmış olmama rağmen, öncelikle bir asp.net geliştiricisi olduğumu bilmeliyim. WPF'ye geçiş, bir hafta kadar (40+ saat) sonra (imo) yaptığınız kadar büyük değildir, çoğu tekrar ikinci doğa olmuştur.

Her neyse, en azından bu kitabın yayıncılarına göre, Anders Hejlsberg'in WPF'in arkasındaki mimarlardan biri olduğuna inanıyorum.

WPF'in arkasındaki mimarlardan biri olarak, Chris Anderson ustaca“ nasıl ”değil“ neden ”i de ustaca açıklıyor. Bu kitap WPF'in tasarım ilkelerini ve en iyi uygulamalarını anlamak isteyen herkes için mükemmel bir kaynaktır. ”–Anders Hejlsberg, teknik çalışma arkadaşı, Microsoft Corporation

http://www.amazon.com/Essential-Windows-Presentation-Foundation-WPF/dp/0321374479


11
“WPF'in arkasındaki mimarlardan biri olarak, Chris Anderson ustaca anlatıyor ...” Chris Anderson'ın WPF'nin arkasındaki mimarlardan biri olduğunu öne sürüyor. Anders Hejlsberg, Microsoft Corporation'da alıntı yapılan metne göre sadece bir "teknik eleman" dır ve WPF'ye katılımını kanıtlamaz.
Andreas Rejbrand

Ah bu doğru olabilir, ama saygı duyduğunu gösteriyor!

2
Ya da en azından Chris'e saygı duyuyor.
Bruce McGee

1
Ya da en azından Halkla İlişkiler Müdürü, yorum yapmak için itibarı olan birine sahip oldu.
Çabuk_ancak

@Andreas; İyi şaka: sadece "teknik eleman". Chris Anderson'ı küçültmek istemiyor - Biraz düşük profilde kalmak için harika bir adam ( msdn.microsoft.com/en-us/ff395959 orada, ancak simplegeek.com uzun süredir güncellenmedi). Anders Hejlsberg, birçok .NET meselesinde (Teknik Görevliler geniş bir erişime sahiptir), her şeyden sonra bir çerçeve görevlisidir (VCL, WCF, vb. - bkz. Simple-talk.com/content/article.aspx?article=673 ve microsoft .com / presspass / exec / techfellow / Hejlsberg / default.mspx ) ve sadece birkaç teknik
eleman var

2

Winforms, Delphi gelişimiyle neredeyse aynıdır. Ve elbette bunun bir nedeni var. Delphi / Object Pascal nesne modelinin C # 'yi ağır şekilde etkilemesi gibi, form sistemi de Winforms'u etkiledi.

WPF, işlerin yönlendirildiği yön gibi görünüyor; (muhteşem!) VS2010 UI’nın, Winform’lar üzerine inşa edilmiş eski üretimlerden farklı olarak WPF tabanlı olduğu söyleniyor.

Konfor bölgesinde kalmak istiyorsanız, winforms ile gidin. En son ve en büyükleri yakalamak istiyorsanız, kendinizi WPF'ye bırakın.


3
WinForms, Delphi'nin genişlettiği şeydir, Delphi'ye kıyasla çok sinir bozucu bir durumdur. Delphi'den daha çok VB-3'e benziyor ve IME frutrasyon seviyesi benzer.

2

Delphi programcısı değilim, ama evet hem WinForm (ağır) hem de WPF (orta dereceden daha az) üzerinde çalıştım. Kendime bu durumda olduğum için WinForm'dan WPF'ye geçiş yapacak birinin hayal kırıklığı düzeyinde bir dereceye kadar size katılıyorum, ancak yalnızca alıştığım sürece. WPF ile WinForm'a kıyasla ne kadar harika ve esnek olduğunu öğrenin ve görün. En azından Delphi geçmişinden gelen ve Winform için olmayan bir kişi için ağır bir öğrenme eğrisi vardır. Sizin için, kesinlikle WinForm yerine WPF'ye doğru ilerlemeye değer ve zamana değer.

Başlamak için aşağıdaki bağlantılara bakmak isteyebilirsiniz:


1

Bazı Windows Forms çalışmalarını (çoğunlukla Pocket PC'lerde) ve aynı prensipleri kullanan diğer bazı .NET dışı ortamları yapmıştım. Yaklaşık üç yıl önce WPF'ye taşındığımda, ilk birkaç ay boyunca ona küfür ediyordum. Sonunda sadece "tıklandı" ve arkama bakmadım - aslında bir sonraki projem Windows Formlarına geri dönmemi istedi.

Windows Forms'un en son güncellendiği tarih 2005 yılındaydı (VS 2005.) Hala var ancak Microsoft tarafından daha fazla geliştirilmiyor. WPF, masaüstü uygulamaları için blokta yer alan yeni çocuk, bu yüzden MS araçlarını kullanarak .NET platformuna geçecekseniz, bunun güvenli bir bahis olduğunu söyleyebilirim. Bazı insanlar Silverlight'ı masaüstü çözümü olarak zorluyor, ancak buna bir olasılık olarak baktığımda, çok fazla sınırlaması olduğunu gördüm (web bağlamında anlamlı gelebilir, ancak masaüstünde pek fazla bir şey ifade etmiyor).

Alt satır: Dik bir öğrenme eğrisi var ve ben hala öğreniyorum. Ama her şeye değdi. Bu çok komik.


1

Sıfırdan yeni uygulamalar yazacaksanız, WinForms kullanmak yanlış olur. Temelde bir yatırım perspektifinden ölmüştür. Microsoft uzun bir süre etrafta tutacaktır, ancak yeni özellikler veya yeni destek vb.

Kariyer perspektifinden bakıldığında, WPF'yi WinForms'a karşı bilmek de çok daha iyidir. Yukarıdaki aynı nedenlerle. Ayrıca, Silverlight'ı öğrenmede iyi bir ayağınız olacak. Bu iki platform arasında bir ton örtüşme var.

Ve son olarak, WPF sadece daha basit. Ve daha güçlü.

Öğrenme eğrisi daha dik, size bunu veriyorum. Ama sonuçta daha faydalıdır.


0

Belirtilmesi gereken ek bir husus, mono'da WPF desteği için bir plan bulunmamasıdır . (Mono) çapraz platform desteğine hiç ilgi göstermediğinizi fark ettim, ancak geleceğiniz için bir fırsat olabilir (Winforms ile giderseniz). Muhtemelen, mono (veya benzeri) WPF için destek gelecektir.

düzenleme: Verdiğim bağlantıya dikkat çekti ve Gülshan'ın yorumu vurgulandığında, Moonlight mono ekibinin çapraz platform Silverlight desteği sağlaması için yönettiği açık kaynaklı bir çaba .


Ancak Moonlight aktif gelişme içinde.
Gulshan

-1

WPF'yi duyduğumda heyecanlanmıştım, fikir kulağa hoş geliyordu ve içinde gördüğüm her şey çok güzeldi. Ancak, Visual Studio 2008'de (kuşkusuz bir beta) kullanmaya geldiğimde tasarımcı / IDE'de çalışmayı sinir bozucu ve ilginç buldum.

O zamanlar
blogumda küçük bir bilgi yayınladım: http://blog.dantup.com/2007/08/visual-studio-2008-beta-2-first.html
http://blog.dantup.com/2007 /08/wpf-designer-cider-part-2.html

2010'da hiç denemedim, ancak birkaç kişiyle konuştum ve anlaşılması gereken biraz karışık / sinir bozucu gibi görünüyor.

Uygulamanızın şüphesiz WPF'de daha iyi görüneceğini / hissedeceğini düşünüyorum, ancak aynı zamanda sizi daha uzun süre alacağını düşünüyorum ve yol boyunca başınızı çok sıkıştıracaksınız.


"Başvurunuzun şüphesiz WPF'de daha iyi görüneceğini / hissedeceğini düşünüyorum". Zorunlu değil - WPF sizi utangaç bir kullanıcı arayüzü yazmaktan kurtarmaz. Burada bazı örneklerim var (bunlardan biri benim, biri de bazı şeyleri test etmek için hızlı bir 'n' kirli atma uygulamasıydı.) Siz (ve çekimleri çağıranlar, aka $$) harcamaya hazır Zaman ve çaba, WPF'de harika şeyler yapabilirsiniz.
MetalMikester

Doğru tespit. Demek istediğim, WPF'nin Windows widget'ları tarafından daha az kısıtladığınızdan daha güzel bir uygulama oluşturmanıza olanak sağlamasıydı. Tabii ki, bu hem iyi hem de kötü bir şey olabilir!
Danny Tuppeny

3
Kesinlikle kötü bir şey. WPF, tamamen yerel olmayan arayüzler çağına girdi. Anlaması zor ve bakması daha da zor. Bir insanın güzel olduğunu düşündüğü şey, bir başkasının en kötü kabusu. Yerleşik işletim sistemi kontrollerine "ten" bırakmak, herkesi mutlu etmenin harika bir yoludur. Sonra tekrar, Office'in en son sürümlerini kullanmayı reddediyorum çünkü arayüze dayanamıyorum. Yani, bilirsin, çimlerimden ve eşyalarımdan defol.
Cody Gray

1
Bunun biraz öznel olduğunu söyleyebilirim. Muhtemelen Kelime Sözcüğümün tüm bu kuralları çiğnemesini istemem ama bazı yazılım parçaları bu programdan kurtulabilir. Örneğin. Gördüğüm en iyi WPF örneklerinden biri Yahoo'ydu
Danny Tuppeny
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.