Моя компания разработала давний продукт, используя MFC в Visual C++ в качестве стандарта дефакто для разработки пользовательского интерфейса. Наша кодовая база содержит МНОГО унаследованного/архаичного кода, который необходимо поддерживать в рабочем состоянии. Некоторые из этих кодов старше меня (первоначально написаны в конце 70-х годов), а некоторые члены нашей команды все еще работают в Visual Studio 6.
Однако, к счастью, внутри компании был сделан вывод, что наш продукт выглядит несколько устаревшим по сравнению с нашими конкурентами, и что нужно что-то делать.
В настоящее время я работаю над новой областью пользовательского интерфейса, которая совершенно отделена от остальной части продукта. Поэтому мне дали возможность опробовать 'новые' технологические стеки в качестве своего рода испытательного полигона, прежде чем начнется долгий процесс переноса остальной части пользовательского интерфейса.
В свободное время я уже некоторое время использую C# с Windows Forms и .net framework, и мне это нравится, но я несколько обеспокоен головной болью, вызванной взаимодействием. Хотя эта конкретная ветвь пользовательского интерфейса не будет требовать большого взаимодействия с унаследованной кодовой базой C++, я могу предвидеть, что это станет проблемой в будущем.
Альтернативой является продолжение работы с MFC, но попытка использовать преимущества нового пакета функций, поставляемого с VS2008. Думаю, это самый простой вариант, но я беспокоюсь о долговечности и о том, что не смогу воспользоваться всеми преимуществами .net...
Итак, что же мне выбрать? У нас небольшая команда, поэтому моя рекомендация, скорее всего, будет принята в качестве будущего направления развития - я хочу, чтобы все было правильно.
MFC мертв? C#/Winforms - это путь вперед? Есть ли что-то еще, что я упускаю? Помощь будет очень признательна!
I' m разработчик на приложении, у которого есть тонна наследия кодекс MFC, и у нас есть все Ваши те же проблемы. Крупный водитель для нашей стратегии должен был устранить столько риска и неуверенности, сколько мы могли, который означал избегать, чтобы Большие Переписали. Как все мы знаем, TBR терпит неудачу большую часть времени. Таким образом, мы выбрали поэтапный подход, который позволяет нам сохранять модули это won' t измениться в текущем выпуске, сочиняя новые возможности справился, andporting особенности, которые получают улучшения к управляемому.
Вы можете сделать это несколько путей:
Примите содержание WPF согласно своим взглядам MFC (см. < href =" http://www.codeguru.com/cpp/cpp/cpp_managed/interop/article.php/c14589" > here)
Для приложений MFC MDI создайте новую структуру WinForms и примите свои взгляды MFC MDI (см. < href =" http://www.codeproject.com/KB/miscctrl/HostMFC.aspx" > here)
Примите контроль за работой пользователей WinForms в Диалогах MFC и Взглядах (см. < href =" http://msdn.microsoft.com/en-us/library/ahdd1h97.aspx" > here)
Проблема с принятием WPF (выбор 1) состоит в том, что это потребует, чтобы Вы переписали все свои UI сразу, иначе it' ll выглядят довольно шизофреничными.
Второй подход выглядит жизнеспособным, но очень сложным.
Третий подход - тот, который мы выбрали и it' s работа очень хорошо. Это позволяет Вам выборочно освежать области своего приложения, поддерживая полную последовательность и не трогательные вещи, которые являются not' t сломанный.
Visual C++ 2 008 Пакетов Особенности выглядит интересным, я haven' t играемый с ним все же. Кажется, что это могло бы помочь с Вашей проблемой устаревшего взгляда. Если " ribbon" также издал бы неприятный звук для Ваших пользователей, Вы могли посмотреть на сторонний MFC, и/или WinForms управляют продавцами.
Моя полная рекомендация состоит в том, что interop + возрастающее изменение определенно предпочтителен для уборки изменений.
После чтения Вашего продолжения я могу определенно подтвердить, что рост производительности структуры значительно перевешивает инвестиции в изучение его. Никто в нашей команде не использовал C# в начале этого усилия, и теперь все мы предпочитаем его.
В зависимости от приложения и готовности ваших клиентов установить .NET (не все из них готовы), я бы определенно перешел на WinForms или WPF. Взаимодействие с кодом на C++ значительно упрощается за счет рефакторинга не пользовательского кода в библиотеки классов с использованием C++/CLI (как вы'отметили в своем выборе тегов).
Единственная проблема с WPF заключается в том, что может быть трудно поддерживать текущий внешний вид и стиль. Переход на WinForms может быть осуществлен при сохранении текущего внешнего вида вашего графического интерфейса. WPF использует настолько другую модель, что попытка сохранить текущий макет, вероятно, будет бесполезной и определенно не в духе WPF. WPF также имеет низкую производительность на машинах до Vista, когда запущено более одного процесса WPF.
Я предлагаю выяснить, что используют ваши клиенты. Если большинство перешло на Vista, и ваша команда готова проделать большую работу с графическим интерфейсом, я бы посоветовал отказаться от WinForms и перейти на WPF. В противном случае, безусловно, серьезно рассмотрите WinForms. В любом случае, библиотека классов на C++/CLI - это ответ на ваши проблемы взаимодействия.
Вы don' t предоставляют много подробной информации о том, что Ваш устаревший кодекс делает или как it' s структурированный. Если у Вас есть определенные исполнительные критерии, Вы могли бы хотеть поддержать часть своей кодовой базы в C ++. You' у ll есть более легкое время, делая interop с Вашим старым кодексом, если он выставлен правильным способом - Вы можете звонить в существующую кодовую базу от C# сегодня? Могло бы стоить думать о проекте разобраться в этой структуре.
На пункте WPF Вы могли утверждать, что WinForms может быть более соответствующим. Перемещение в WinForms - большой шаг для Вас и Вашей команды. Возможно, они могут быть более довольны движением к WinForms? It' s лучше зарегистрированный, больше опыта в рынок, и полезный, если Вы все еще должны поддержать окна 2 000 клиентов.
Вы могли бы интересоваться [Расширяющий Приложения MFC с.NET Структурой] [1]
Что-то еще, чтобы рассмотреть C ++/CLI, но я don' у t есть опыт с ним.
[1]: http://www.amazon.com/Extending-MFC-Applications-NET-Framework/dp/032117352X/ref=sr_1_2? ie=UTF8& s=books& qid=1218715329& sr=1-2
Поблагодарите всех любезно за свои ответы, it' s заверение, чтобы видеть, что обычно согласие следует за моим ходом мыслей. Я нахожусь в удачной ситуации, что наше программное обеспечение также работает на нашем собственном специальном оборудовании (для промышленности вещания) - таким образом, выбор OS действительно наш и навязан нашим клиентам. В настоящее время we' ре, управляющее XP/2000, но я вижу желание скоро переместиться до Vista.
Однако мы также должны обеспечить очень точный контроль над работой GPU, которую я предполагаю, автоматически исключает ускорение аппаратных средств и WPF? Я должен был высказать то мнение на своем оригинальном посту - извините. Возможно, it' s возможный использовать два GPUs..., но that' s другой вопрос в целом...
Команда doesn' у t есть любой значительный опыт C# и I' m никакой эксперт самостоятельно, но я думаю, что полные долгосрочные преимущества управляемой окружающей среды, вероятно, перевешивают время it' ll берут, чтобы набрать скорость.
Похож на Winforms, и у C# есть он на данный момент.
Если бы вы рассматривали возможность перехода на C# и, следовательно, на .NET, я бы рассмотрел Windows Presentation Foundation, а не WinForms. WPF - это будущее интеллектуальных клиентов в .NET, а навыки, которые вы приобретете, вы сможете использовать повторно, если захотите создавать браузерные приложения Silverlight.
Я согласен с мнением о WPF. Пользовательский интерфейс на основе Tag/XML кажется более переносимым, чем WinForms.
Я полагаю, что также нужно учитывать свою команду, если в ней не так много современных специалистов по C#, то это фактор, но в будущем рынок для разработчиков MFC уменьшается, а C# растет.
Может быть, возможен какой-то поэтапный подход? Я довольно часто занимался перекодировкой старых приложений на C#, и это всегда занимает гораздо больше времени, чем вы предполагаете, особенно если вы сохраняете некоторый старый код или ваша команда не настолько хорошо знакома с C#.