2009-01-11 89 views
5

我有一個非常大的應用程序,150萬行C++,這是目前使用文檔/視圖體系結構的MFC。該應用程序包括大量的3D矢量圖形,電子表格,以及非常多的對話框和Windows。在DVA的約束下,它的寫法相當好,因爲在用戶界面中沒有重要的程序邏輯,並且可以使用用戶界面完成的任何事情也可以使用COM/OLE自動化界面以編程方式執行。將基於桌面的MFC C++應用程序轉換爲網絡應用程序是否可行

在許多用戶的要求下,我一直在爲創建程序的瀏覽器界面而開展思考,程序本身在服務器上運行。到目前爲止的想法是將所有COM接口轉換爲DCOM,並將UI重寫/移植到Java。最初的實驗表明這將是一項大量的工作。

其他任何人有任何想法更容易implmentation?任何人都會遇到任何重構或類似的工具來專門幫助這種類型的端口?

+2

1.5MLoc - 到網絡上?而不是你。我的建議是:告訴用戶網絡是一種時尚,它很快就會炸開:) – U62 2009-01-11 14:21:12

+0

@RHM,我的想法正確,因此在問題中'可行'這個詞。 – 2009-01-11 14:33:17

回答

5

簡而言之,它是可行的,不要使用java,而且這將是一個相當大的工作量。

好幾年前(大約在IE5的時候),我被一個客戶請求回答類似的問題。有問題的應用程序是一個結構良好的三層桌面應用程序。

研究的結果是,這是可能的。所考慮的選項是Java和CGI,使用CORBA或COM/DCOM。考慮構建一個Java小程序,但排除它,因爲它與C++桌面版本沒有太大差別。

採取的方法是採取後端層,並將其轉化爲坐在CGI層後面的服務器應用程序。用戶界面在很大程度上是用我們現在所知的Ajax重寫的,即Javascript和HTML。用戶界面分爲瀏覽器元素和服務器元素。

我的確在考慮編寫一個工具來轉換文檔,視圖和對話框,並將它們打包成兼容的格式,但經過多次分析後,很明顯這樣做並不是真的可行,因爲MFC實際上是非常緊密耦合的到Win32 API和本身。根據對話的數量,可能值得寫一些東西來轉換它們。

我的確發現,即使在一個結構良好的系統中,本應該在後端存在的相當一部分代碼已經泄漏到前端。

如果我現在要做同樣的事情,有一些優秀的JavaScript庫可以提供幫助,但我仍然會採用與使用Ajax的瀏覽器相同的方法,可能類似於qooxdooYUI。我也可能會考慮使用XUL並將至少大部分對話框移到後端。

從您的要求列表中唯一引起關注的是3d矢量圖形,但在this JS toyJS3D中可能有一些里程數。

這只是一個簡短的總結,因爲我試圖避免寫一篇論文。

1

這將是一個大量的工作,但你已經完成了良好的設計,所以你已經中途了!

我首先將你的MFC UI移動到一個單獨的可執行文件中,然後用它來驅動後端代碼。一旦你這樣做了(這應該相對容易,因爲你只是重新包裝現有的代碼),那麼你會更好地瞭解它是否能夠處理連接到單個後端服務器的多個用戶。

一旦你修好了,你可以看到你需要實現連接到後端的所有領域,並且你可以開始用你喜歡的任何語言或平臺重新編寫UI。

對於Web界面,我會編寫與您的後端服務器交互的Web服務器代碼。通過這種方式,您可以更輕鬆地進行耦合,並且您所擔心的安全性和連接問題要少得多。我一直認爲webserver +瀏覽器是一個n層應用程序中的表示層。至於網絡技術,您可以使用flex,activex,silverlight或可能的jquery/jsext將豐富的內容導入瀏覽器。

4

在考慮將MFC應用程序轉換爲Web應用程序之前,我建議您閱讀Jeff Atwood的「Avoiding The Uncanny Valley of User Interface」。

如果您正在考慮或積極構建Ajax/RIA應用程序,則應考慮Uncanny Valley用戶界面設計。當您在Web瀏覽器中創建「桌面」式應用程序時,您違反了用戶對Web應用程序外觀和行爲方式的不成文期望。這種選擇可能會對可學性,使用的愉悅性和採用率產生顯着的負面影響。

我不知道你的應用程序是什麼樣子,它的「網絡便攜性」有多好,但是可能爲網絡做一個精確的應用程序副本並不是最好的選擇。

1

這是一個幾年前,因爲我這個發揮各地,但我沒有嘗試一次取一個小應用程序,編譯它可能然後在網頁中很容易地使用一個Active X組件。 (這個應用程序是基於一個用Borland C++ Builder創建的表單,所以將它作爲一個活動的X組件是相當簡單的,我不能判斷它是多麼困難,它會將你的MFC D/V應用程序作爲一個活動組件X組件)。

有必要在用戶計算機上註冊活動的X組件(也相當微不足道,但您必須重新註冊組件的每個新版本 - 我覺得我正在填寫註冊表) 和現在的Internet Explorer使用activeX 引發網頁警告,因此它會要求用戶降低IE中的安全級別以防止抱怨。

1

是的,我們有一個大的(Borland公司),C++,可以最好地描述爲具有架構「大泥球」應用程序做到了這一點。

你確實有一些有趣的問題,但我們做了一個非常'webby'和有吸引力的前端(原型在ASP.NET中,但可以是包括Java在內的任何東西),很大程度上只是觸發桌面應用程序中的事件服務器,然後顯示生成的圖形,表格和文本。我們可以很靈活地顯示類似圖形的內容 - 例如.PNG,flash對象或.SVG,具體取決於瀏覽器

工作效果令人驚訝,只需要花費幾個程序員幾個月的時間來實現一旦我們有了一個模型(設計是一個問題)。

目前,我們只實現了一個有用的子集整個桌面應用程序,但我們繼續,後端會從前端更清潔分離(和減少大小)。如果你已經在GUI和後端之間有一些很好的分離,那麼這是一個很大的優勢。

我們還看了一個主要生產自動從應用程序的Web界面,但在設計階段決定,是要看看太像在瀏覽器窗口中運行的應用程序WINDOWS32 ....

2

看看Wt可能適合您的需求。它是一個C++ Web應用程序工具包。

相關問題