【发布时间】:2010-10-08 02:36:28
【问题描述】:
我们有一个大小合适的 MFC MDI 桌面应用程序。有没有一种合理的方法可以将 MFC 应用程序转换为 .net 应用程序,还是只重写更好?如果答案是针对特定应用的,您使用什么标准来做出决定?
【问题讨论】:
我们有一个大小合适的 MFC MDI 桌面应用程序。有没有一种合理的方法可以将 MFC 应用程序转换为 .net 应用程序,还是只重写更好?如果答案是针对特定应用的,您使用什么标准来做出决定?
【问题讨论】:
在考虑从 MFC 到 WPF 的转换时,我花了很多时间研究 C#、WPF、Expression Blend、MVVM。
如果您想失去 50% 的 MFC 功能,并在完成后拥有一个非常复杂、非常缓慢的应用程序,那么 WPF(VS 2010)是有意义的。没有 MDI。
MVVM 开销太大,不实用。
收益:垃圾收集、可调整大小的对话框、XAML 和更多数据绑定选项几乎不值得。
最近对 MFC 的升级,添加了一个功能区栏(优于 Expression Blend 中的功能区栏创建)给了我想要的一切。
简而言之,从 MFC 转换到 WPF/.NET 是个坏主意;算了。
不要放弃 MFC Microsoft,否则你会让人跳槽。 (WTF?????)
【讨论】:
我会跳过 WinForms 并直接使用 WPF。
根据您的应用程序的设计方式,您不必重写所有内容。您可以使用托管 C++ 包装器从 C# 代码调用 C++ 代码,从而允许您重用现有 C++ 代码。微软也有关于 WPF 和 Win32/MFC 之间互操作的extensive documentation。你可以用 WinForms 做类似的事情。
Microsoft 不遗余力地提供从 MFC 到 WinForms/WPF 的迁移路径,因为他们知道公司不能仅仅丢弃多年开发的代码。
此外,如果您在 Google 上搜索“WPF 和 MFC”,您会发现很多人在同一个项目中使用这两种技术的示例。
【讨论】:
看我对this question的回答,和这个基本一样。
【讨论】:
当从 MFC 移植到 WinForms 时,您将不得不重写 UI 代码,如果 UI 和业务逻辑之间有很好的分离,那么您最好通过使用托管 C++ 或将其转换为 C# 来移植业务逻辑(语法足够相似以使其成为可能)。
我为一个小型 MFC 应用程序完成了此操作,我通过将 C++ 代码粘贴到 c# 文件中并修复代码直到它开始工作,将业务逻辑移植到 c#,我从头开始重写了 GUI。
事实证明这是一个非常明智的举措,因为我们不断将其开发成一个大型应用程序,最终结果比我们在 MFC 中在相同的时间表中所做的任何事情都要好。
我们还有一个巨大的 MFC 应用程序,在 UI 和业务逻辑之间没有明确的分离,我们想将它移植到 .net,但还没有弄清楚如何去做。
【讨论】:
这肯定是重写,但 MFC 中的许多概念都有 .NET 对应物,因此您将能够映射到很多域模型。我会使用 Windows 窗体,因为它可以轻松映射到 MFC 提供的相同 Win32 样式 UI。
如果您的 MFC 应用程序很好地分离了域模型和业务规则,您甚至可以使用 C++.NET 来重用其中的一些代码,并保持非托管或将其转换为托管类,并可选择将其转换为C# 稍后。
【讨论】: