У нас есть настольное приложение MFC MDI приличного размера. Есть ли разумный способ преобразовать приложение MFC в приложение .net или лучше просто переписать? Если ответ зависит от приложения, по каким критериям вы принимаете решение?
Преобразование большого приложения MFC в .net
Ответы (5)
Я бы пропустил WinForms и сразу обратился к WPF.
В зависимости от того, как разработано ваше приложение, вам не придется все переписывать. Вы можете вызывать код C ++ из кода C # с помощью управляемых оболочек C ++, что позволяет повторно использовать существующий код C ++. У Microsoft также есть обширная документация по взаимодействию между WPF и Win32 / MFC. Вы можете делать то же самое с WinForms.
Microsoft сделала все возможное, чтобы предоставить пути миграции с MFC на WinForms / WPF, потому что они знают, что компании не могут просто выбросить годы разработанного кода.
Кроме того, если вы загуглите «WPF и MFC», вы найдете множество примеров людей, использующих эти две технологии в одном проекте.
При переносе с MFC на WinForms вам придется переписать код пользовательского интерфейса, если у вас есть хорошее разделение между пользовательским интерфейсом и бизнес-логикой, вам будет лучше перенести бизнес-логику либо с помощью управляемого C ++, либо путем перевода ее на C # (синтаксис достаточно похоже, чтобы это стало возможным).
Я сделал это для небольшого приложения MFC, я перенес бизнес-логику на C #, вставив код C ++ в файл C # и исправив код до тех пор, пока он не начал работать, я переписал графический интерфейс с нуля.
Это оказалось очень умным ходом, потому что мы продолжали развивать это в большом приложении, и конечный результат намного лучше, чем все, что мы могли бы сделать в MFC в том же графике.
У нас также есть огромное приложение MFC без четкого разделения между пользовательским интерфейсом и бизнес-логикой, мы хотим перенести его на .net, но еще не выяснили, как это сделать.
Это определенно будет переписыванием, но многие концепции в MFC имеют аналоги в .NET, так что вы сможете сопоставить большую часть своей модели предметной области. Я бы использовал Windows Forms, так как это будет легко сопоставляться с тем же пользовательским интерфейсом в стиле Win32, который предлагает MFC.
Если ваше приложение MFC четко разделило модель предметной области и бизнес-правила, вы даже сможете использовать C ++. NET для повторного использования части этого кода и либо оставить его неуправляемым, либо превратить его в управляемые классы и, при необходимости, преобразовать его в C # позже. .
См. Мой ответ на этот вопрос, который в основном совпадает с этим.
Я потратил много времени на изучение C #, WPF, Expression Blend, MVVM при рассмотрении вопроса о преобразовании из MFC в WPF.
WPF (VS 2010) имеет смысл, если вы хотите потерять 50% функций MFC и получить очень сложное и очень медленное приложение, когда вы закончите. Нет MDI.
У MVVM слишком много накладных расходов, чтобы быть практичным.
Выгоды: сборка мусора, диалоговые окна с изменяемым размером, XAML и другие параметры привязки данных вряд ли того стоят.
Недавние обновления MFC, добавление полосы ленты (которая превосходит создание полосы ленты в Expression Blend) дали мне все, что я хотел.
Короче говоря, преобразование из MFC в WPF / .NET - плохая идея; забудь об этом.
Не бросайте MFC Microsoft, иначе люди будут прыгать с корабля. (WTF ?????)