WPF vs WinForms - perspektif programmer Delphi?

38

Saya telah membaca sebagian besar utas tentang WPF vs WinForms dan saya menemukan diri saya terjebak dalam ambivalensi malang yang dapat Anda alami ketika memutuskan antara teknologi sebelumnya yang sudah dicoba dan benar (Winforms), dan itu penerusnya (WPF).

Saya seorang programmer veteran Delphi bertahun-tahun yang akhirnya membuat lompatan ke C #. Rekan programer Delphi saya di luar sana akan mengerti bahwa saya senang mengetahui bahwa Anders Hejlsberg, dari ketenaran Delphi, adalah arsitek di balik C #. Saya memiliki kecanduan yang kuat untuk komponen khusus VCL Delphi, terutama yang terlibat dalam pembuatan Wizards multi-langkah dan komponen yang bertindak sebagai wadah untuk komponen anak.

Dengan latar belakang itu, saya berharap Anda yang beralih dari Delphi ke C # dapat membantu saya dengan keputusan WinForms vs WPF saya untuk menulis aplikasi awal saya. Catatan, saya sangat tidak sabar ketika pengkodean dan hal-hal seperti dukungan debugger otomatis lengkap dan lengkap yang lengkap dapat membuat atau menghancurkan proyek untuk saya, termasuk dapat menemukan informasi yang tersedia tentang fitur dan panggilan API dan terlebih lagi, solusi untuk bug .

Utas dan komentar SO dalam rentang tanggal awal 2009 memberi saya perhatian besar terhadap WPF ketika sampai pada frustrasi potensial yang dapat merusak kode pengembangan C # UI saya. Di sisi lain, menghabiskan banyak waktu mempelajari teknologi API yang, bahkan jika tidak ditinggalkan, akan segera diganti (WinForms), sama-sama meresahkan dan saya menemukan dukungan GPU di WPF yang menggoda.

Karena itu ambivalensi saya. Karena saya belum belajar teknologi baik namun saya memiliki kesempatan langka untuk mendapatkan awal yang baru dan tidak harus menghadapi kurva "unlearning" besar saya telah melihat orang menyebutkan dalam berbagai utas ketika seorang programmer WinForms membuat pindah ke WPF. Di sisi lain, jika menggunakan WPF hanya akan terlalu membuat frustrasi atau memiliki konsekuensi negatif besar lainnya untuk pengembang RAD yang tidak sabar seperti saya, maka saya akan tetap menggunakan WinForms hingga WPF mencapai tingkat dukungan dan kemudahan penggunaan yang sama. Untuk memberikan Anda sebuah contoh nyata ke dalam psikologi saya sebagai seorang programmer, saya menggunakan VB dan kemudian Delphi untuk sepenuhnya menghindari rasa sakit yang sangat nyata dari pengodean dengan MFC, perpustakaan Windows UI yang banyak dialami pengembang saat mengembangkan aplikasi Windows awal. Saya tidak pernah menyesali keberuntungan saya karena menghindari MFC.

Juga menyenangkan untuk mengetahui apakah Anders Hejlsberg memiliki andil dalam arsitektur WPF dan / atau WinForms, dan jika ada perbedaan dalam visi kreatif dan kemudahan penggunaan yang terkandung dalam basis kode mana pun. Akhirnya, untuk programmer Delphi lagi, beri tahu saya berapa banyak "IDE schock" yang saya gunakan ketika menggunakan WPF yang bertentangan dengan WinForms, terutama ketika datang ke dukungan debugger. Setiap komentar pasar kerja yang diperbarui untuk 2011 akan dihargai juga.

Robert Oschler
sumber
2
Bukankah WPF memiliki reputasi yang sangat buruk untuk kinerja yang buruk?
David Heffernan
9
@ David: Memang memiliki reputasi itu, tapi seperti biasa, kenyataannya tidak seburuk rap. GUI Visual Studio 2010 ditulis ulang dalam WPF, dan pada sebagian besar mesin tampaknya tidak ada penurunan kecepatan yang nyata bila dibandingkan dengan VS 2008. @Robert: Dikatakan, rekomendasi saya akan sangat mendukung WinForms, terutama untuk mualaf Delphi. Tapi saya agak ragu untuk memposting itu sebagai jawaban, jangan sampai dibatalkan menjadi terlupakan. Semua orang tampaknya menentangnya karena itu teknologi "lama", seolah-olah itu berarti sesuatu.
Cody Gray
@Cody. Dimengerti Saya mendapatkan beberapa info hebat dengan balasan dan komentar, tetapi saya berharap untuk lebih banyak info langsung tentang WPF dan itu dukungan debugger vs. WinForms dan beberapa info pasar kerja. Jawaban atas pertanyaan saya yang diajukan dalam bidang topik tersebut masih diinginkan.
Robert Oschler
1
@CodyGray: Anda pasti bercanda. VS2010 seratus kali lebih lambat dari VS2008, dan WPF juga. Kesan Anda mungkin disebabkan oleh bias programmer yang biasa: Anda hanya melihat mesin-mesin canggih terkini, yang tidak dimiliki kebanyakan pengguna normal.
Timwi

Jawaban:

21

Jika Anda memiliki latar belakang Delphi, Anda akan kecewa dengan WinForms. Anda akan mencoba melakukan hal-hal yang mudah di VCL, hanya untuk menemukan bahwa mereka sangat sulit, atau bahkan tidak mungkin. WPF akan jauh lebih sedikit membatasi.

Sebagai contoh, berikut adalah beberapa batasan WinForms yang kami alami:

  • WinForms tidak memiliki apa pun yang sebanding dengan TAction, jadi jika Anda terbiasa mengkodekan dengan tindakan, berbagi teks dan ikon yang sama antara item menu dan tombol toolbar dan menu klik kanan, memusatkan logika yang memungkinkan Anda, dan memperbarui keadaan yang diaktifkan di latar belakang dengan OnUpdate ... Anda akan membenci WinForms, di mana Anda harus melakukan semua itu dengan cara yang keras dan rawan kesalahan.
  • MainMenu WinForms yang lama (.NET 1.0 vintage) tidak mendukung gambar di sebelah item menu, dan MenuStrip yang baru (diperkenalkan pada .NET 2.0) penuh dengan bug yang Microsoft tolak untuk diperbaiki (karena perbaikan bug mungkin merusak kompatibilitas ke belakang).
  • Banyak kontrol, misal TreeView, kurang sempurna dibandingkan dengan rekan-rekan VCL-nya (sangat lambat, tidak ada undian pemilik, banyak opsi kustomisasi hilang, dll.)
  • Tidak ada yang menyerupai komunitas pengembang kontrol pihak ketiga yang semarak di Delphi. Ada pustaka kontrol kualitas di luar sana, tetapi Anda membayarnya - penawaran gratis seperti VirtualTreeView tidak tersedia untuk WinForms.

WPF sedikit lebih sederhana dalam beberapa hal daripada WinForms, tetapi jauh lebih fleksibel.

  • Anda menginginkan sesuatu seperti TAction? WPF memiliki ICommand, yang sama kayanya dengan yang biasa Anda gunakan (tetapi pastikan Anda membaca artikel MVVM Josh Smith - biasanya Anda harus mengaktifkan / menonaktifkan perintah Anda secara manual ketika keadaan berubah, tetapi versinya secara otomatis mengeluarkan kode Anda yang memungkinkan di latar belakang seperti Anda terbiasa dengan OnUpdate).
  • Anda ingin gambar pada menu? Itu dibangun di (dan tempat di dekat kereta di WinForms).
  • WinForms meninggalkan undian pemilik pada beberapa kontrol penting, tetapi jika Anda menggunakan WPF sebagai gantinya, Anda tidak perlu undian pemilik - jika Anda ingin simpul TreeView Anda memiliki teks hitam diikuti oleh angka biru dalam tanda kurung, Anda hanya perlu letakkan di DataTemplate Anda dan berfungsi, tidak perlu kode undian pemilik yang jelek.
  • Anda ingin kontrol pihak ketiga? Dalam banyak kasus, Anda tidak memerlukannya, karena Anda dapat memperluas apa yang ada dalam cara WinForms dan, ya, pengembang VCL hanya bisa bermimpi.

WPF memiliki kurva belajar yang sangat curam, tetapi jika Anda mengambil buku yang bagus (mis. " WPF 4 Unleashed "), itu akan membantu Anda mengatasi yang terburuk - dan Anda akan senang bekerja dengan kerangka kerja yang tidak akan menahan Anda seperti WinForms.

Joe White
sumber
1
Terima kasih atas komentar langsung Delphi. Adakah komentar pasar kerja dan info apa pun mengenai dukungan debugger VS 2010 untuk WPF, terutama masalah penelusuran / inspeksi? Saya akan memeriksa buku yang Anda tautkan.
Robert Oschler
1
Tidak tahu tentang pasar kerja. Sedangkan untuk debugger, perkirakan frustrasi jika konstruktor jendela Anda mengeluarkan pengecualian, karena debugger akan enggan memberi Anda jejak stack - tetapi yang harus Anda lakukan hanyalah menggali dua tingkat InnerException dalam dialog pengecualian-detail debugger. Dan jika binding Anda tidak berfungsi, jalankan di bawah debugger dan lihat di jendela Output untuk melihat kesalahan yang mengikat. Selain itu, saya tidak yakin masalah apa yang Anda miliki. Debug WPF OK dalam pengalaman saya, dan MVVM memungkinkan Anda menguji lebih banyak logika UI Anda daripada di WinForms.
Joe White
6
Kurva belajar yang sangat curam. Anda tidak begitu banyak program di WPF; Anda bertanya tentang bagaimana meyakinkan WPF untuk melakukan apa yang Anda inginkan.
Ian Boyd
Sebenarnya, beberapa rintangan terbesar adalah belajar bekerja dengan kerangka kerja yang memisahkan tanggung jawab dengan benar, daripada hanya memiliki semuanya secara membabi buta berasal dari TKitchenSink.
Joe White
1
Bisakah saya memiliki formulir Delphi, tetapi tetap menggunakan bahasa C #? Silahkan?
Robert Harvey
13

Saya biasanya sangat terkejut dengan orang yang mengatakan bahwa mereka tidak memiliki pengalaman yang baik dengan WPF. Saya seorang pengembang yang beralih dari C ++ / MFC ke C # / WinForms ke C # / WPF. Transisi dari WinForms ke WPF tidak mudah karena mempelajari XAML tidak terlalu mudah tetapi begitu Anda mendapatkannya, itu adalah teknologi yang luar biasa. Saya, untuk satu, tidak bisa kembali ke WinForms. WPF sangat luar biasa.

Hal lain yang mengganggu saya adalah bagaimana orang biasanya mengasosiasikan WPF dengan UI saja. Ini memang 100 kali lebih baik daripada WinForms menurut saya dalam kemudahan desain UI, tetapi ada banyak alasan lain Anda akan senang menggunakan WPF:

  1. UI, tentu saja.
  2. Binding Sihir biasa. Fitur paling kuat setelah UI. Aplikasi LOB paling diuntungkan dari ini.
  3. Perintah.
  4. Pemisahan masalah. Desainer bekerja pada desain, program programmer.
  5. Properti terlampir. Anda dapat memperluas fungsionalitas kontrol pihak ketiga tanpa kode sumber (meskipun titik ini dapat menjadi bagian dari poin pertama).
  6. Transisi mudah ke Silverlight (Keduanya web & WP7)

Anda mungkin tidak setuju dengan saya tentang poin terakhir sebagai alasan bagi Anda untuk belajar WPF, tetapi jika Anda bertanya kepada saya, itu adalah salah satu yang terbesar. Anda belajar WPF, Anda dapat dengan mudah beralih ke Silverlight. Silverlight tumbuh besar, dan juga merupakan teknologi yang luar biasa.

Dan alasan terbesarnya adalah, ini adalah masa depan. Mungkin digabung dengan Silverlight tetapi keterampilannya akan tetap sama.

Jadi, saya akan sangat menyarankan Anda untuk menggunakan WPF.

Yogesh
sumber
1
Saya tidak mengatakan bahwa saya tidak setuju, tetapi semua alasan itu terkait UI (meskipun Anda mengatakan bahwa Hal lain yang mengganggu saya adalah bagaimana orang biasanya mengaitkan WPF dengan hanya UI )
Ed S.
1
+1 karena saya setuju dengan semua poin Anda. Saya harus memilih jika saya ingin belajar WPF atau Winforms, dan saya memilih WPF dan tidak pernah menyesalinya. @ Id: Saya tidak melihat ada yang benar-benar terkait UI kecuali yang pertama.
Rachel
1
@ Rachel: Benarkah? Binding digunakan untuk memperbarui UI ketika nilai properti berubah. Pemisahan masalah di # 4 jelas hanya berlaku saat mengembangkan UI. # 5 adalah tentang kontrol pihak ketiga. Tidak ada UI, tidak ada kontrol. # 6 sekali lagi tentang menerjemahkan ke UI silverlight. Apakah saya melewatkan sesuatu?
Ed S.
3
Saya sudah kurang lebih sebaliknya: WPF -> WinForms -> C ++ / MFC. Ya, saya seorang pemberontak; Saya berenang di hulu. Saya hanya tidak melihat sesuatu yang menarik tentang apa yang dibawa WPF ke UI. Sekelompok perangkat lunak yang tampak mengerikan dan bukan asli bukan ide saya tentang "kemajuan". Di luar itu, saya tidak yakin bagaimana pola desain yang begitu banyak (termasuk jawaban ini) kaitkan dengan WPF dengan cara apa pun eksklusif untuk WPF. Anda dapat menggunakan pola desain dalam bahasa apa pun atau kerangka kerja GUI. Apakah bedanya hanya jika Anda tidak dipaksa , orang tidak akan melakukannya? Kemudahan transisi ke Silverlight adalah satu-satunya alasan kuat di sini.
Cody Gray
5
Tugas pertama saya dengan aplikasi WPF: jatuhkan toolbar, buat 14 dlus tinggi. tidak bisa dilakukan . Tugas kedua: mengatur font bentuk untuk mencocokkan wajah dan ukuran font pengguna. tidak dapat dilakukan Langkah ketiga: menambahkan item ke tampilan daftar tanpa ikatan tidak dapat dilakukan saya berhenti.
Ian Boyd
5

Jelas WPF adalah cara untuk berpikir di masa depan. Menguasai itu sulit, tetapi platform ini dirancang dengan sangat baik dan fleksibel.

Beberapa baris saran:

  • Mulai dengan mudah: Jangan mencoba menerapkan proyek pertama Anda hanya dengan menggunakan MVVM atau animasi mewah. Mulai dengan jendela, tombol, dan daftar.
  • Manfaatkan DataBinding.
  • Beli buku WPF Unleashed oleh Adam Nathan.
Eduardo Molteni
sumber
+1. Jawaban Praktis. Cobalah untuk tidak menerapkan proyek pertama Anda hanya dengan menggunakan MVVM atau animasi mewah
Karthik Sreenivasan
4

Saya pertama-tama harus mencatat bahwa saya sebagian besar adalah pengembang asp.net, meskipun saya telah menggunakan banyak winforms sebelumnya. Beralih ke WPF tidak sebesar yang Anda buat (imo) setelah sekitar satu minggu (40+ jam), sebagian besar adalah sifat kedua lagi.

Bagaimanapun saya percaya Anders Hejlsberg adalah salah satu arsitek di balik WPF, setidaknya menurut penerbit buku ini->

" Sebagai salah satu arsitek di balik WPF, Chris Anderson terampil menjelaskan tidak hanya 'bagaimana,' tetapi juga 'mengapa.' Buku ini adalah sumber yang bagus untuk siapa pun yang ingin memahami prinsip-prinsip desain dan praktik terbaik WPF. ”–Anders Hejlsberg, rekan teknis, Microsoft Corporation

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

Mata-mata
sumber
11
"Sebagai salah satu arsitek di balik WPF, Chris Anderson dengan ahli menjelaskan ..." menunjukkan bahwa Chris Anderson adalah salah satu arsitek di belakang WPF. Anders Hejlsberg hanya "rekan teknis" di Microsoft Corporation, menurut teks yang dikutip, yang dengan demikian tidak membuktikan keterlibatannya dalam WPF.
Andreas Rejbrand
Ah itu bisa benar, tetapi itu menunjukkan dia menghormatinya!
2
Atau setidaknya dia menghormati Chris.
Bruce McGee
1
Atau setidaknya dept PR mendapatkan seseorang dengan reputasi untuk memberikan komentar.
cepat_now
@Andreas; Lelucon yang bagus: hanya "rekan teknis". Tidak ingin mengurangi Chris Anderson - Dia adalah pria hebat menjaga profil rendah ( msdn.microsoft.com/en-us/ff395959 ada di sana, tetapi simplegeek.com belum diperbarui untuk waktu yang lama). Anders Hejlsberg terlibat dalam banyak hal. NET (Technical Fellows memiliki jangkauan luas), setelah semua ia adalah seorang kerangka kerja pria (VCL, WCF, dll - lihat simple-talk.com/content/article.aspx?article=673 dan microsoft .com / presspass / exec / techfellow / Hejlsberg / default.mspx ) dan hanya ada beberapa rekan teknis ...
Jeroen Wiert Pluimers
2

WinForms hampir identik dengan pengembangan Delphi. Dan, tentu saja, ada alasan untuk itu. Sama seperti model objek Delphi / Object Pascal sangat memengaruhi C #, demikian pula sistem formulir memengaruhi Winforms.

WPF tampaknya menjadi arah yang dituju; sudah dikatakan bahwa (cantik!) VS2010 UI berbasis WPF, tidak seperti generasi sebelumnya yang dibangun di WinForms.

Jika Anda ingin tetap berada di zona nyaman Anda, gunakan winforms. Jika Anda ingin terjebak pada yang terbaru & terhebat, benamkan diri Anda di WPF.

3Dave
sumber
3
WinForms adalah apa yang dikembangkan Delphi, itu sebenarnya sangat membuat frustrasi dibandingkan dengan Delphi. Ini lebih seperti VB-3 daripada Delphi, dan IME tingkat frutsasinya mirip.
2

Saya bukan programmer Delphi, tapi ya saya telah bekerja pada WinForm (berat) dan WPF (kurang dari sedang). Saya setuju dengan Anda sampai batas tertentu pada tingkat frustrasi untuk seseorang yang akan beralih dari WinForm ke WPF karena saya sendiri berada dalam situasi itu, tetapi hanya sampai saya terbiasa. Pelajari dan lihat betapa indah dan fleksibelnya WPF dibandingkan dengan WinForm. Ini memiliki kurva belajar yang berat, setidaknya untuk seseorang yang berasal dari latar belakang Delphi, dan bukan Winform. Bagi Anda, itu pasti layak bergerak ke arah WPF daripada WinForm, dan nilainya waktu.

Anda mungkin ingin melihat tautan di bawah ini untuk memulai dengan:

Kumar
sumber
1

Saya telah melakukan beberapa pekerjaan Windows Forms (kebanyakan di Pocket PCs), ditambah beberapa lingkungan non-NET lainnya yang menggunakan prinsip yang sama. Ketika saya pindah ke WPF sekitar tiga tahun yang lalu, selama beberapa bulan pertama saya bersumpah. Akhirnya itu hanya "diklik" dan saya belum melihat ke belakang - sebenarnya saya akan kecewa jika proyek saya berikutnya mengharuskan saya untuk kembali ke Formulir Windows.

Terakhir kali Formulir Windows diperbarui pada 2005 (VS 2005.) Masih ada di sana tetapi tidak lagi ditingkatkan oleh Microsoft. WPF adalah anak baru di blok untuk aplikasi desktop, jadi jika Anda akan pindah ke platform .NET menggunakan alat MS, maka saya akan mengatakan itu adalah taruhan yang aman. Beberapa orang mendorong Silverlight sebagai solusi desktop, tetapi ketika saya melihatnya sebagai kemungkinan, saya menemukan bahwa itu memiliki terlalu banyak keterbatasan (yang mungkin masuk akal dalam konteks web, tetapi tidak begitu banyak pada desktop.)

Intinya: Ada kurva belajar yang curam, dan saya masih mempelajarinya. Tapi itu semua sepadan. Sangat menyenangkan.

MetalMikester
sumber
1

Jika Anda akan menulis aplikasi baru dari awal, menggunakan WinForms akan menjadi kesalahan. Itu pada dasarnya mati dari perspektif investasi. Microsoft akan mempertahankannya untuk waktu yang lama, tetapi Anda tidak akan mendapatkan fitur baru, atau dukungan baru, dll. WPF adalah arah yang jelas untuk aplikasi desktop untuk masa depan pada platform MS.

Dari perspektif karir, Anda juga jauh lebih baik mengetahui WPF vs WinForms. Untuk alasan yang sama di atas. Juga, Anda akan memiliki pengetahuan yang baik tentang belajar Silverlight. Ada satu ton tumpang tindih antara kedua platform tersebut.

Dan akhirnya, WPF lebih menyenangkan. Dan lebih kuat.

Kurva pembelajaran lebih curam, saya berikan itu. Tetapi pada akhirnya lebih bermanfaat.

RasionalGeek
sumber
0

Satu pertimbangan tambahan yang harus disebutkan adalah bahwa tidak ada rencana untuk dukungan WPF di mono . Saya menyadari Anda tidak menyatakan minat pada dukungan lintas platform (mono), tetapi mungkin ada peluang untuk ini di masa depan Anda (jika Anda menggunakan Winforms). Agaknya, dukungan untuk WPF dalam mono (atau serupa) akan datang.

sunting: Seperti tautan yang saya berikan, dan komentar Gulshan menyoroti, Moonlight adalah upaya open-source yang dipimpin oleh tim mono untuk memberikan dukungan Silverlight lintas-platform .

Argalatyr
sumber
Tapi Moonlight sedang dalam pengembangan aktif.
Gulshan
-1

Saya senang ketika saya mendengar tentang WPF, ide itu terdengar hebat, dan semua yang saya lihat di WPF sangat indah. Namun, ketika saya datang untuk menggunakannya dalam Visual Studio 2008 (diakui, beta) saya merasa frustasi dan unik untuk bekerja dengan perancang / IDE.

Saya memposting sedikit info di blog saya saat itu:
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

Saya belum mencobanya pada tahun 2010, meskipun saya telah berbicara dengan beberapa orang yang pernah melakukannya, dan sepertinya masih sedikit rumit / menjengkelkan untuk bisa dipahami.

Saya pikir aplikasi Anda tidak diragukan lagi akan terlihat / terasa lebih baik di WPF, tapi saya juga berpikir itu akan membuat Anda lebih lama untuk membangun dan Anda akan sering membenturkan kepala Anda di sepanjang jalan.

Danny Tuppeny
sumber
"Saya pikir aplikasi Anda tidak diragukan lagi akan terlihat / terasa lebih baik di WPF". Belum tentu - WPF tidak akan menyelamatkan Anda dari menulis UI yang menyebalkan. Saya punya beberapa contoh di sini (salah satunya adalah milik saya, meskipun itu hanya aplikasi cepat 'n' kotor untuk menguji beberapa hal.) Jika Anda (dan orang-orang yang memanggil tembakan, alias $$) bersedia untuk menghabiskan waktu dan usaha, Anda dapat melakukan beberapa hal luar biasa di WPF.
MetalMikester
Titik adil. Yang saya maksudkan adalah bahwa WPF memungkinkan Anda untuk membuat aplikasi yang lebih indah, karena Anda kurang dibatasi oleh widget Windows. Tentu saja, ini bisa menjadi hal yang baik dan buruk!
Danny Tuppeny
3
Pasti hal yang buruk. WPF telah mengantarkan era antarmuka yang sepenuhnya non-asli. Sulit dipahami dan bahkan lebih sulit dilihat. Apa yang orang anggap indah adalah mimpi terburuk orang lain. Membiarkan "menguliti" ke kontrol OS bawaan adalah cara yang fantastis untuk membuat semua orang senang. Kemudian lagi, saya menolak untuk menggunakan versi Office terbaru karena saya tidak tahan dengan antarmuka. Jadi, Anda tahu, keluar dari halaman dan barang-barang saya.
Cody Gray
1
Saya akan mengatakan ini sedikit subjektif. Saya mungkin tidak ingin Word Pocessor saya melanggar semua aturan ini, tetapi beberapa perangkat lunak bisa lolos begitu saja. Misalnya. salah satu sampel WPF terbaik yang saya ingat pernah lihat adalah sampel Yahoo - bagi saya, itu adalah peningkatan besar pada aplikasi berbasis widget Windows: blogs.msdn.com/cfs-filesystemfile.ashx/__key/…
Danny Tuppeny