2011-04-11 24 views
4

我有一份合同,我必須繼續開發和舊版應用程序套件,這些套件在VB5中被編程。更省時:將應用程序從VB5重寫或轉換爲C#

我有修復和新功能開發的錯誤。

所以,我有幾個選擇:

  1. 保持編程VB5 (NOOOOOOOOOOOOOOO !!!!)
  2. 轉換VB5到C#(如何沒有要瘋了???難道 可能嗎?)
  3. 重寫整個應用程序套件 (耗費很長的時間)

是否有任何其他的選擇嗎?我該怎麼辦?

編輯:啊,還有,它依賴於我想移動到SQL EXPRESS的ACCESS數據庫。因爲這是一個瘋狂的數據庫,90年代一個愚蠢的程序員做出了不合邏輯的結果。

謝謝

+0

它是什麼樣的應用程序?它是Windows窗體嗎? – 2011-04-11 13:39:33

+0

這實質上是相同的https://stackoverflow.com/questions/638152/best-development-tools-for-upgrading-from-vb6-0/638994#638994 – DaveInCaz 2017-10-05 12:01:11

回答

0

也許你應該先轉換爲vb.net,然後轉換爲C#?

+0

任何好辦法呢? – TomShreds 2011-04-11 14:33:46

3

我每次做的選擇只是重寫或購買合適的替代品,如果我能找到一個。

我曾嘗試從VB6到VB.NET的增量升級,但我不喜歡這種方法,因爲它留下了我不想使用的ActiveX控件。重寫更清潔。

我不認爲有一個從VB5到C#的轉換器。你可能能夠從VB5轉到VB.NET,然後轉換爲C#,但根據我的經驗,重寫的時間要少於嘗試升級和亂糟糟的代碼。

+1

+1用於重寫。根據我的經驗,當從VB5轉換到VB.NET時,您最終會進行更多手動操作,然後自動完成。 – 2011-04-11 13:43:57

1

沒有可靠的方法來做2)所以它是1)或3)。

我不認爲你的客戶想要支付3)。但是,也許你可以把它賣掉的可靠性,支持等

否則你堅持1)

1

一種方法是從戰術上重寫C#代碼的部分 - 你可以將你的所有的領域開始很可能是bug修復最多的,創建C#程序集來鏡像功能,然後通過COM interop將這些程序暴露給VB5代碼。

我們強烈建議您使用這套方法來進行單元測試。

我聽說Michael Feathers的Working Effectively With Legacy Code是理解如何最好地切斷這樣的問題的最好的書。

1

答案絕對取決於很多因素。我最近有一個類似的項目(10年加上老VB6的Windows應用程序,一個大型的意大利麪條的代碼庫),並用「混合」的方法解決它:

  • 錯誤是固定在VB6
  • 新功能被開發了。NET 4,使用COM互操作

我們開發了一些WPF對話框並將它們樣式化爲使用舊界面來處理新UI。

此選項僅適用於新功能與主應用程序相當獨立時的功能,但它的優點是至少利用新技術的生產力併爲未來轉換鋪平了道路。

0

如果你只是需要修復一個錯誤,而且這是一個相當簡單的錯誤,並且除了VB5之外,你不會預期更多的工作。其他任何東西都會引入更多的工作。但是,如果這真的是一個真正的「現場」產品,你希望將來能夠在很多方面發揮作用,那麼我可能會從頭開始。我的猜測是,自從編寫應用程序以來,您已經學會了很多關於設計和體系結構的知識 - 所以您不妨藉此機會編寫更易維護的應用程序。 (你也可能已經知道原始程序中的哪些設計決定最終會出錯。)

1

我最近完成了一個項目,我們使用Artinsoft's VB Upgrade Companion將很多傳統VB6應用程序轉換爲C#。

決定哪種方法最好是一個艱難的決定。在很多情況下,轉換代碼最終會變得非常痛苦,特別是如果有很多邏輯基於兩個平臺之間顯着不同的功能(例如單索引數組或通過Information.Err處理錯誤對象而不是通過例外)。另一方面,如果您嘗試從頭開始編寫它,那麼您很可能會無意中改變一些在查看原始VB5代碼時不明顯的細微行爲。像這樣的事情可能很難追查。

一個很好的折衷辦法是使用一個轉換器來移植代碼,然後使用它作爲從頭開始編寫代碼的指南,因爲希望有一些地方可以將轉換後的代碼直接提取到新的代碼庫中。但同時,您還可以在其他地方編寫更易維護的代碼。儘管如此,如果原始的VB5編寫得很好並且(相對)架構良好,那麼我會建議不要進行任何升級。您將花費更多時間來嘗試匹配舊應用程序的現有行爲,而不是僅僅處理舊代碼。

祝你好運,無論你決定做什麼 - 你需要它:)