我有一个非常大的应用程序,150万行C++,目前使用Document/View架构的MFC.该应用程序包括许多3D矢量图形,电子表格,以及很多对话框和Windows.在DVA的限制范围内,编写得相当好,因为用户界面中没有重要的程序逻辑,任何可以使用用户界面完成的操作也可以使用COM/OLE自动化接口以编程方式执行.
在许多用户的要求下,我一直在想着为程序创建一个浏览器接口,程序本身就在服务器上运行.到目前为止的想法是将所有COM接口转换为DCOM并将UI重写/移植到Java.最初的实验表明,这将是一项巨大的工作.
那里的其他任何人都有更容易实现的想法吗?任何人都遇到任何重构或类似的工具专门帮助这种端口?
简短的回答是它是可行的,不使用java,并且它将是相当多的工作.
好几年前(大约在IE5时期),客户要求我回答类似的问题.有问题的应用程序是结构良好的三层桌面应用程序.
该研究的结果是它是可能的.考虑的选项是Java和CGI,使用CORBA或COM/DCOM.考虑构建Java applet,但排除了因为它与C++桌面版本不会有太大的不同.
采取的方法是采用后端层并将其转换为位于cgi层后面的服务器应用程序.UI主要使用我们现在所知的Ajax(即Javascript和HTML)重写.UI在浏览器元素和服务器元素之间分开.
我确实考虑过编写一个工具来转换文档,视图和对话框,并将它们包装成兼容的格式,但经过大量分析后很明显,这样做真的不可行,因为MFC实际上与Win32 API紧密耦合和它自己.根据对话的数量,可能值得写一些东西来转换它们.
我确实发现,即使在结构良好的系统中,应该在后端的相当多的代码泄漏到前端.
如果我现在要做同样的事情,有一些优秀的javascript库可以提供帮助,但我仍然采用相同的方法在浏览器中使用Ajax尽可能多地做,可能像qooxdoo或YUI.我也可能会考虑使用XUL并将至少大部分对话框移动到后端.
从您的要求列表中唯一关注我的是3D矢量图形,尽管这个JS玩具或JS3D可能有一些里程数.
这只是一个简短的总结,因为我试图避免写论文.