Perusahaan saya telah mengembangkan berdiri lama produk menggunakan MFC Visual C++ sebagai standar de facto untuk pengembangan UI. Kami codebase mengandung BANYAK warisan/kuno kode yang harus tetap operasional. Beberapa dari kode ini adalah lebih tua dari saya (awalnya ditulis di akhir 70-an) dan beberapa anggota tim kami masih di Visual Studio 6.
Namun, kesimpulan syukurlah tercapai secara internal bahwa produk kami yang tampak agak kuno dibandingkan dengan pesaing kami', dan bahwa sesuatu harus dilakukan.
Saat ini saya bekerja di daerah baru UI yang cukup terpisah dari sisa dari produk tersebut. Oleh karena itu saya telah diberi kesempatan untuk mencoba 'baru' teknologi tumpukan sebagai semacam pembuktian sebelum proses panjang bergerak dari sisa UI dimulai.
Saya telah menggunakan C# dengan Windows Forms dan .net framework untuk sementara di waktu luang saya dan menikmatinya, tapi saya agak khawatir tentang sakit kepala yang disebabkan oleh interop. Saat ini cabang tertentu dari UI won't membutuhkan banyak interop dengan warisan C++ basis kode, saya bisa forsee ini menjadi masalah di masa depan.
Alternatif adalah untuk melanjutkan dengan MFC, tetapi mencoba dan mengambil keuntungan dari fitur baru paket yang dikirim dengan VS2008. Ini saya kira adalah pilihan termudah, tapi aku khawatir tentang umur panjang dan tidak mengambil keuntungan dari kebaikan itu .net...
Jadi, mana yang saya pilih? Kami're tim kecil jadi rekomendasi saya akan sangat mungkin dapat diterima sebagai arah masa depan untuk pengembangan kami - aku ingin melakukannya dengan benar.
MFC mati? C#/Winforms jalan ke depan? Apakah ada hal lain yang saya'm benar-benar hilang? Bantuan sangat dihargai!
I'm pengembang pada sebuah aplikasi yang memiliki banyak warisan MFC kode, dan kami memiliki semua anda kekhawatiran yang sama. Besar driver untuk strategi kami adalah untuk menghilangkan banyak risiko dan ketidakpastian seperti yang kita bisa, yang dimaksud menghindari Big menulis Ulang. Seperti yang kita semua tahu, TBR gagal sebagian besar waktu. Jadi kami memilih inkremental pendekatan yang memungkinkan kita untuk melestarikan modul yang tidak't akan berubah dalam rilis saat ini, menulis fitur baru berhasil, andporting fitur yang mendapatkan perangkat tambahan untuk berhasil.
Anda dapat melakukannya dengan beberapa cara:
Host WPF konten di MFC views (lihat here)
Untuk MFC MDI apps, create a new WinForms kerangka dan host anda MFC MDI views (lihat disini)
Host WinForms kontrol pengguna di MFC Dialog dan Pandangan (melihat disini)
Masalah dengan mengadopsi WPF (opsi 1) adalah bahwa hal itu akan mengharuskan anda untuk menulis ulang semua UI sekaligus, selain itu'll terlihat cantik skizofrenia.
Pendekatan kedua terlihat layak, tapi sangat rumit.
Pendekatan ketiga adalah salah satu yang kita dipilih dan's bekerja dengan sangat baik. Hal ini memungkinkan anda untuk selektif refresh area aplikasi anda dengan tetap menjaga konsistensi keseluruhan dan tidak menyentuh hal-hal yang tidak't rusak.
Visual C++ 2008 Feature Pack terlihat menarik, saya belum't dimainkan dengan hal itu meskipun. Tampaknya seperti itu mungkin bisa membantu dengan masalah anda dari terlihat usang. Jika "pita" akan terlalu menggelegar untuk pengguna anda anda bisa lihat pada pihak ketiga MFC dan/atau WinForms kontrol vendor.
Secara keseluruhan saya rekomendasi adalah bahwa interop + perubahan inkremental pasti lebih baik untuk menyapu perubahan.
Setelah membaca anda follow-up, saya pasti bisa mengkonfirmasi bahwa produktivitas keuntungan dari framework jauh lebih besar daripada investasi dalam belajar itu. Tak seorang pun di tim kami telah menggunakan C# pada awal usaha ini dan sekarang kita semua suka itu.
Tergantung pada aplikasi dan kesediaan pelanggan untuk menginstal .NET (tidak semua dari mereka), saya pasti akan pindah ke WinForms atau WPF. Interop dengan kode C++ ini sangat modern dengan refactoring non-UI kode ke kelas perpustakaan menggunakan C++/CLI (seperti yang anda've dicatat dalam pilihan anda dari tag).
Satu-satunya masalah dengan WPF adalah bahwa hal itu mungkin sulit untuk mempertahankan arus terlihat-dan-merasa. Pindah ke WinForms dapat dilakukan dengan tetap menjaga arus tampilan GUI. WPF menggunakan suatu model yang berbeda yang mencoba untuk menjaga tata letak saat ini mungkin akan menjadi sia-sia dan pasti tidak akan dalam semangat WPF. WPF juga tampaknya memiliki kinerja yang buruk di pra-Vista mesin ketika lebih dari satu WPF proses yang sedang berjalan.
Saran saya adalah untuk mencari tahu apa yang klien anda menggunakan. Jika sebagian besar telah pindah ke Vista dan tim anda siap untuk dimasukkan ke dalam banyak GUI bekerja, saya akan mengatakan melewatkan WinForms dan pindah ke WPF. Jika tidak, pasti terlihat serius di WinForms. Dalam kedua kasus, perpustakaan kelas di C++/CLI adalah jawaban untuk anda interop kekhawatiran.
Anda don't memberikan banyak detail pada apa yang anda legacy kode atau cara's terstruktur. Jika anda memiliki kriteria kinerja tertentu anda mungkin ingin mempertahankan beberapa kode dalam C++. Anda'akan memiliki waktu lebih mudah melakukan interop dengan kode lama jika terkena dengan cara yang tepat - dapat anda menghubungi ke basis kode yang ada dari C# hari ini? Mungkin layak berpikir tentang sebuah proyek untuk mendapatkan struktur ini benar.
Pada titik WPF, anda bisa berpendapat bahwa WinForms mungkin lebih tepat. Pindah ke WinForms adalah langkah besar untuk anda dan tim anda. Mungkin mereka akan lebih nyaman dengan pindah ke WinForms? It's lebih terdokumentasi, lebih banyak pengalaman di pasar, dan berguna jika anda masih perlu untuk mendukung windows 2000 klien.
Anda mungkin tertarik pada Memperpanjang MFC Aplikasi dengan .NET Framework
Hal lain yang perlu dipertimbangkan adalah C++/CLI, tapi aku don't memiliki pengalaman dengan itu.
Terima kasih banyak untuk tanggapan anda, it's meyakinkan untuk melihat bahwa umumnya konsensus berikut saya garis pemikiran ini. Saya beruntung situasi bahwa perangkat lunak kami juga berjalan pada kita sendiri kustom hardware (untuk industri penyiaran) - jadi pilihan OS adalah benar-benar milik kita dan dorongan kepada pelanggan kami. Saat ini kami're menjalankan XP/2000, tapi saya bisa melihat keinginan untuk pindah ke Vista segera.
Namun, kita juga perlu untuk menjaga sangat baik kontrol atas kinerja GPU, yang saya kira secara otomatis aturan keluar WPF dan akselerasi hardware? Aku harus membuat titik saya posting asli - maaf. Mungkin itu's mungkin untuk menggunakan dua Gpu... tapi yang's pertanyaan lain sama sekali...
Tim doesn't memiliki signifikan C# dan'm tidak ahli sendiri, tapi saya pikir secara keseluruhan manfaat jangka panjang dari pengelolaan lingkungan mungkin lebih besar daripada waktu itu'akan mengambil untuk mendapatkan sampai dengan kecepatan.
Sepertinya Winforms dan C# memiliki itu untuk sekarang.
Yang anda untuk melihat bergerak untuk C# dan oleh karena itu .NET, saya akan mempertimbangkan Windows Presentation Foundation daripada WinForms. WPF adalah masa depan dari smart klien .NET, dan keterampilan anda mengambil anda'akan dapat kembali jika anda ingin membuat browser-host aplikasi Silverlight.
Saya setuju dengan WPF sentimen. Tag/XML berbasis UI akan tampak menjadi sedikit lebih portabel dari WinForms.
Saya kira anda juga harus mempertimbangkan tim anda, jika tidak ada banyak saat ini C# keterampilan, maka itu adalah sebuah faktor, tapi ke depan pasar untuk MFC pengembang berkurang dan C# tumbuh.
Mungkin semacam sedikit demi sedikit pendekatan akan menjadi mungkin? Saya telah terlibat dengan recoding legacy aplikasi untuk C# cukup sedikit, dan itu selalu membutuhkan waktu lebih lama dari yang anda akan memperkirakan, terutama jika anda menjaga beberapa kode legacy, atau tim anda isn't yang mahir dengan C#.