Future proofing duża aplikacja UI-MFC z 2008 Feature pack, czy C # i Winforms?

Moja Firma opracowała od dawna produkt wykorzystujący MFC w Visual C++ jako standard defacto do tworzenia interfejsu użytkownika. Nasza baza kodowa zawiera wiele legacy / archaiczny kod, który musi być utrzymywany w działaniu. Część tego kodu jest starsza ode mnie (pierwotnie napisana pod koniec lat 70.), a niektórzy członkowie naszego zespołu nadal pracują w Visual Studio 6.

Jednak na szczęście wewnętrznie doszliśmy do wniosku, że nasz produkt wygląda nieco przestarzale w porównaniu do naszych konkurentów i że coś trzeba zrobić.

Obecnie pracuję nad nowym obszarem interfejsu użytkownika, który jest zupełnie oddzielny od reszty produktu. W związku z tym otrzymałem szansę wypróbowania "nowych" stosów technologii jako swego rodzaju poligonu doświadczalnego, zanim rozpocznie się długi proces poruszania się po pozostałej części interfejsu użytkownika.

Używam C# z Windows Forms i. Net framework przez jakiś czas w wolnym czasie i cieszyć się nim, ale jestem nieco zaniepokojony bólami głowy spowodowanymi przez interop. Podczas gdy to konkretna gałąź interfejsu użytkownika nie będzie wymagała wiele interakcji ze starszą bazą kodu C++, mogę forsee to staje się problemem w przyszłości.

Alternatywą jest kontynuowanie pracy z MFC, ale spróbuj skorzystać z nowego pakietu funkcji dostarczonego wraz z VS2008. To chyba najprostsza opcja, ale martwię się o długowieczność i nie korzystam z dobroci, jaką jest. net ...

Więc, co wybrać? Jesteśmy małym zespołem, więc moja rekomendacja prawdopodobnie zostanie przyjęta jako przyszły kierunek dla naszego rozwoju-chcę go dobrze zrealizować.

Czy MFC nie żyje? Czy C# / Winforms jest dobrym rozwiązaniem? Coś jeszcze mi umknęło? Pomoc bardzo mile widziana!

Author: Ryan Fox, 2008-08-14

6 answers

Jestem programistą aplikacji, która ma mnóstwo starszego kodu MFC i mamy wszystkie twoje obawy. Głównym motorem naszej strategii było wyeliminowanie jak największego ryzyka i niepewności, co oznaczało uniknięcie dużych zmian. Jak wszyscy wiemy, TBR najczęściej zawodzi. Dlatego wybraliśmy podejście przyrostowe, które pozwala nam zachować moduły, które nie będą się zmieniać w bieżącym wydaniu, pisząc nowe funkcje zarządzane i raportując funkcje, które otrzymują ulepszenia do zarządzane.

Możesz to zrobić na kilka sposobów:

  1. Hostuj zawartość WPF na swoich widokach MFC (zobacz tutaj)

  2. W przypadku aplikacji MFC MDI utwórz nowy framework WinForms i udostępnij widoki MFC MDI (zobacz tutaj)

  3. Kontrolki użytkownika host WinForms w oknach dialogowych i widokach MFC (zobacz tutaj)

Problem z przyjęciem WPF (opcja 1) polega na tym, że będzie to wymagało przepisania całego interfejsu użytkownika na raz, w przeciwnym razie będzie to wyglądać dość schizofreniczna.

Drugie podejście wygląda na realne, ale bardzo skomplikowane.

Trzecie podejście to to, które wybraliśmy i działa bardzo dobrze. Umożliwia selektywne odświeżanie obszarów aplikacji, zachowując ogólną spójność i nie dotykając rzeczy, które nie są uszkodzone.

Visual C++ 2008 Feature Pack wygląda ciekawie, nie bawiłem się nim jednak. Wygląda na to, że to może pomóc w Twoim problemie przestarzałego wyglądu. Gdyby "wstążka" była zbyt dla Twoich użytkowników możesz spojrzeć na zewnętrznych dostawców MFC i/lub WinForms control.

Moim ogólnym zaleceniem jest to, że zmiany stopniowe interop + są zdecydowanie lepsze niż zmiany o dużym zasięgu.


Po przeczytaniu Twojej obserwacji mogę zdecydowanie potwierdzić, że wzrost wydajności RAM znacznie przewyższa inwestycje w naukę. Nikt z naszego zespołu nie używał C# na początku tego wysiłku, a teraz wszyscy go preferujemy.

 7
Author: Aidan Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 22:41:07

W zależności od aplikacji i chęci Twoich klientów do instalacji. NET (nie wszyscy są), zdecydowanie przeniosłbym się na WinForms lub WPF. Interap z kodem C++ jest znacznie uproszczony przez refaktoryzację kodu nie-UI do bibliotek klas przy użyciu C++ / CLI (jak zauważyłeś w wyborze tagów).

Jedynym problemem z WPF jest to, że może być trudno utrzymać obecny wygląd. Przejście do WinForms można wykonać przy zachowaniu obecnego wyglądu GUI. WPF używa takiego inny model, który próbuje utrzymać obecny układ, prawdopodobnie byłby daremny i na pewno nie byłby w duchu WPF. WPF ma również słabą wydajność na komputerach przed Vista, gdy działa więcej niż jeden proces WPF.

Proponuję dowiedzieć się, czego używają twoi klienci. Jeśli większość przeniosła się do Visty, a twój zespół jest gotowy włożyć wiele pracy z GUI, powiedziałbym, że pomiń WinForms i przenieś się do WPF. W przeciwnym razie zdecydowanie poważnie przyjrzyj się WinForms. W obu case, Biblioteka klas w C++ / CLI jest odpowiedzią na twoje obawy interop.

 2
Author: Zooba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 11:40:53

Nie podajesz zbyt wiele szczegółów na temat tego, co robi twój poprzedni kod lub jak jest skonstruowany. Jeśli masz określone kryteria wydajności, możesz chcieć zachować część kodu w C++. Będziesz miał łatwiejszy czas na interakcję ze starym kodem, jeśli zostanie on wyświetlony we właściwy sposób - czy możesz dziś wywołać istniejący kod z C#? Może warto pomyśleć o projekcie, który poprawi tę strukturę.

Jeśli chodzi o WPF, można by argumentować, że WinForms może być bardziej odpowiedni. Przejście na WinForms to duży krok dla Ciebie i Twojego zespołu. Może będzie im wygodniej przejść do WinForms? Jest lepiej udokumentowany, ma większe doświadczenie na rynku i jest przydatny, jeśli nadal potrzebujesz obsługi klientów systemu windows 2000.

Być może zainteresuje cię rozszerzenie aplikacji MFC o. NET Framework

Jeszcze coś do rozważenia to C++ / CLI , ale nie mam z tym doświadczenia.

 2
Author: Brian Lyttle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 12:04:56

Gdybyś spojrzał na przejście do C# , a więc. NET, rozważyłbym raczej Windows Presentation Foundation niż WinForms. WPF to przyszłość inteligentnych klientów w. NET, A umiejętności, które zdobędziesz, będziesz mógł ponownie wykorzystać, jeśli chcesz tworzyć aplikacje Silverlight hostowane w przeglądarce.

 1
Author: Matt Hamilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 11:28:23

Dziękuję wszystkim uprzejmie za odpowiedzi, to pocieszające widzieć, że ogólnie konsensus podąża za moją linią myślenia. Jestem w szczęśliwej sytuacji, że nasze oprogramowanie działa również na naszym własnym niestandardowym sprzęcie (dla branży nadawczej) - więc wybór systemu operacyjnego jest naprawdę nasz i jest naciskany na naszych klientów. Obecnie uruchamiamy XP / 2000, ale widzę chęć przeniesienia się wkrótce na Vistę.

Jednak musimy również zachować bardzo dobrą kontrolę nad wydajnością GPU, co chyba automatycznie wyklucza WPF i akcelerację sprzętową? Powinienem był to poruszyć w moim oryginalnym poście-przepraszam. Być może możliwe jest użycie dwóch GPU... ale to zupełnie inne pytanie...

Zespół nie ma żadnego znaczącego doświadczenia w C# i sam nie jestem ekspertem, ale myślę, że ogólne długoterminowe korzyści z zarządzanego środowiska prawdopodobnie przewyższają czas, jaki zajmie, aby zacząć działać.

Wygląda na to, że Winforms i C# mają to na razie.

 1
Author: Ali Parr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 13:30:47

Zgadzam się z sentymentem WPF. Interfejs oparty na tagach / XML wydaje się być nieco bardziej przenośny niż WinForms.

Myślę, że też musisz wziąć pod uwagę swój zespół, jeśli nie ma zbyt wielu obecnych umiejętności C#, to jest to czynnik, ale w przyszłości rynek programistów MFC maleje, a C# rośnie.

Może jakieś fragmentaryczne podejście byłoby możliwe? Byłem zaangażowany w rekodowanie starszych aplikacji do C# dość dużo, i to zawsze trwa dużo dłużej niż ty szacuję, zwłaszcza jeśli zachowujesz jakiś starszy kod, lub twój zespół nie jest tak obeznany z C#.

 0
Author: JamesSugrue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 11:36:47