2009-04-11 142 views
10

隨着辦公室人員配置的變化,C#專業技術水平急劇下降,現在有更多的Java開發人員。已經到了上級正在考慮將用C#編寫的現有.NET項目移植到Java世界的時候了。將項目從C#移植到Java

除了明顯的問題starting completely from scratch該公司可以成功完成從.NET C#項目到Java項目的開發成功的可能方式是什麼?

回答

18

這裏有事情要考慮:

  • 這是大項目?如果是的話,儘量堅持使用C#
  • 這是一箇中型項目的組件嗎?如果否,請儘量堅持使用C#
  • 這個小型項目是否意味着僅在Windows上部署?如果是的話,儘量堅持使用C#
  • 這是老的源代碼嗎?如果是,請嘗試堅持使用C#
  • 您是否使用Windows操作系統特定的API?如果是,請嘗試堅持使用C#
  • 您是否使用沒有Java對應方的任何第三方API?如果是,請嘗試堅持使用C#
  • 您是否在「深度」(數據綁定,用戶控件等)中使用.Net?如果是的話,嘗試堅持使用C#
  • 遷移時間比獲得新的/轉換的C#球員更可接受?如果不是,請儘量堅持使用C#
  • 如果您要使用會改變表示的Java框架,您認爲最終用戶不會接受更改嗎?如果是的話,嘗試用C#堅持
  • 檢查廣告

如果您決定轉換:

  • 進入每個組件
  • 每層去
  • 有很多的測試
  • 檢查是否有工具可以幫助遷移(但可能有小的幫助)
+0

爲什麼「#這個小型項目是否只能部署在Windows上?如果是的話,嘗試堅持使用C#」的問題? 我想你錯過了:是gui嗎?嘗試堅持使用c# – Egwor 2009-04-11 20:01:13

+0

如果是小型項目,那麼在C#程序員仍然很少的情況下轉換爲Java是不值得的。但是如果需要在不同的操作系統上運行,那麼它是值得轉換的。 我認爲,GUI的要點在於演示和贏得API調用的變化。 – isntn 2009-04-11 20:08:25

2

如果有任何組件已經被隔離,或者其中任何組件都使用面向服務的體系結構,那麼您可能會一次遷移一個組件(其中每個組件都是重寫的),並且仍然有組件與一個組件進行通信另一個使用相同的互操作網絡協議。可能取決於我們在討論什麼類型的應用程序。

2

確保您有噸的測試,因爲這樣的遷移會咬你至少你期望的地方。

1

您是否有更多.Net或更多Java應用程序正在生產中。如果您已經對.Net服務器和應用程序進行了大量投資,爲什麼不要求Java開發人員中的志願者轉向.Net?語言和語法非常相似,所以最難的部分就是學習框架,除非他們花時間進行UI開發,即使學習框架並不困難。

在我們的辦公室裏,我們有許多非常優秀的開發人員,他們根據需要在Java和.Net之間來回移動。

15

爲了增加Brian和Eric的意見,我認爲爲Java開發人員提供C#應該是直截了當的。他們在概念上非常相似的語言,我會建議培訓您的Java開發人員以獲得一些C#技能,這樣您就不會被迫去進行遷移過程的麻煩。

0

我不是一個Java專家,但是從我的經驗與Java代碼的工作,同時爲C#風扇,下面是一些可能的頭痛:

  • 泛型在Java和C#的實現方式不同。
  • 拳擊/開箱行爲是Java和之間不同的C#
  • Java類命名約定+大量C#生成的代碼
  • 字符串處理(即統一字符編碼/ ASCII考慮)可以根據對Java/C#代碼是所述質量是有問題的移植過來。

就個人而言,我不認爲從頭開始寫作是一個壞主意。既然你已經有了一個工作架構。

1

爲了證明管理,你總是需要在投資回報率和數量方面談。告訴他們,如果移動這些應用程序,它將花費大量的時間和質量保證資源,並且如果由於某些其他項目或新開發的重要性而導致優先級不高,可能很容易退縮。

我有成功的時候我給他們的時間表,投資回報率,工作涉及,涉及金錢等

所以現在來點實際的,我認爲Java開發人員將能夠支持C#,除非他們有對微軟技術的一些基本心理障礙。

1

看一看Net2Java,這puports協助從C#轉換代碼爲Java。我懷疑它會是完美的,但它是從工作中消除許多苦差事的一種方式,讓你擺脫不兼容的框架調用和語言特性的糾結。

一旦你這樣做,你的任務是像任何其他大型遷移項目 - 測試,測試再測試。單元測試,系統集成測試,然後是最終用戶測試。除了單元測試之外,您應該已經使用了與原始應用程序一起使用的那些測試,它們仍然是相關的。

0

我有些驚訝沒有人甚至提出拒絕遷移的想法。

我不相信C#開發人員可以強制切換到Java(反之亦然),因爲他被告知(當然,如果他有槍,也許威脅則)。我需要花費很多時間,鍛鍊和熱情來掌握至少一個技術堆棧。你不可能一夜之間開始使用新技術,並希望提供相同的質量。

我個人不打擾直到被告知開始遷移。在這一點上,我會告訴經理我是.NET的人,並不會因爲他們決定改用其他技術。

至於技術方面,它不是語言語法不同,而是庫和它們的功能。當然,如果所有最新的.NET 3.5的花裏胡哨的廣泛使用,那麼語言差異將爲您提供真正的挑戰。

這確實是一個有趣的方式,只是決定將應用程序從.NET遷移到Java。有人做過不涉及麻煩的想法...

+0

你做你的老闆告訴你的,有很多失業的開發者願意在任何需要的地方編碼。如果你擁有這項業務,那麼它會有所不同。 – gbjbaanb 2009-04-13 14:58:20

3

不論所涉及的語言,這家公司的管理聽起來瘋狂。除了一個簡單的應用程序之外,如何從頭開始重寫整個代碼庫而不是以一種正確的語言僱傭一些具有一定技能的人員,在經濟上是明智的?這是一個衆所周知的問題:太多閒錢了!

現有代碼在開發中有多長時間?如果幾乎沒有開始,我可以理解這一點。如果它看到一個版本並且擁有活躍的用戶,那麼從來沒有是合理的將其扔掉。如果您將C#代碼捐贈給具有正確技能的初創公司,請考慮他們對您有多大的領先優勢。

3

在完成將.NET項目轉換爲Java之前,屬於轉換項目的所有Java開發人員都將學習C#。因此,您不再需要將其轉換爲Java(並且可以丟棄轉換中生成的所有Java代碼),因爲現在您有一個可以同時執行Java和C#的開發團隊。問題解決了。 :d

5

我訂閱Joel的觀點,即a total rewrite is almost always a mistake。其他海報是正確的:C#和Java非常相似,任何有能力的Java開發人員都應該能夠在幾周或幾個月內成爲C#的勝任者。這並不是說他們會成爲專家。這需要更長的時間,但只要您有一些可以指導過程的C#開發人員,那麼您應該可以。

很難對這種轉變是否是不知道你的應用程序的細節是好還是壞主意評論:尺寸,應用,產業類型等。

對於這樣一個開關,我會非常沉默,因爲在我的愚見中,C# is now a much more modern language than Java,並且我把這個作爲Java開發人員十多年來(自1.0.2/1.1天以來)的人說過。

這並不是說Java不好。不是。 Sun確實擁有云,並且近年來表現出不願意或無法推動平臺前進。

1

如果決定這樣做,你會從一個混合的方法,你基本上可以混合使用C#和Java在同一應用程序,因爲這將場景從一個瀑布轉換更改爲逐步遷移最有可能受益。在這裏,我知道的兩種可能性:

1)IKVM(http://www.ikvm.net/),它允許您在.NET運行時運行Java代碼。這允許Java代碼調用C#代碼,反之亦然。然後,您可以凍結C#代碼開發,並在保留功能應用程序的同時,將修改後的功能緩慢添加到Java部分。

2)有Mainsoft(http://dev.mainsoft.com/Default.aspx?tabid=130),它允許您編譯.NET的字節碼轉換爲Java字節碼。他們有一個免費的入門版本。我沒有使用該產品的經驗,但他們在我們只有Java可用的平臺上進行廣告宣傳。