2009-02-20 69 views
5

我目前做的運行建立在Java servlet爲(系統預定日期JSP的一個遺留的Web應用程序公司的一些工作,雖然他們現在正在建設新的網頁時使用的建議)。代碼庫是一個非常混亂的混亂,因爲它在過時的框架之上進行了大約10年的構建。他們在代碼基礎上幾乎沒有一致性(這個應用程序多年來一直由不同的人開發,其中大多數不再在這裏工作),沒有DRY的概念(每個頁面基本上都是從頭開始創建的)有很多不可讀/神祕的代碼並且通常只是一個非常不一致的基礎結構。遷移遺留web應用程序的現代化框架

正如我一直在這裏工作我已經在現代的功能被添加/試圖清理代碼庫一點點。我添加了一些jQuery到我接觸到的地方,引入了一些輸入驗證的安全性,清理了一些模塊以使用不顯眼的JavaScript原則等。我在這裏的工作是在新的模塊上,所以我不會接觸到很多舊的邏輯。我試圖在他們當前的基礎架構下爲我的所有工作介紹最佳實踐,但我不得不調用他們的許多舊代碼來使我的工作保持一致。

他們已經達到了一個點,他們正在考慮大規模更新到系統中。他們希望提高代碼庫的可維護性,並嘗試轉向某種現代框架/ MVC類型的應用程序。很多系統在嵌入式風格標記,javascript:function()調用,沒有單元測試,早於Hibernate等等的XHTML之前就有了。在Servlet中有out.println html生成和調用jsp的混合。

,他們一直在尋找一些應用程序包括檢票,Struts中,掛毯和可能的Grails。問題是,遷移到其中的任何一個都可能需要對已經在使用的系統進行大量重寫,並且他們不能重新開始。

我的問題是:如何將遺留的代碼庫遷移到更現代的框架,同時保留現有的業務邏輯(在重寫已經過測試和工作的東西中沒有意義),最好的方法是什麼。

一些被認爲的想法包括:

  • 寫在房子的模板系統,將與他們當前的基礎設施工作(產生一致的方式頁)

  • 代碼移植到一個框架,如掛毯(重新使用大量的舊代碼)

  • 重寫系統從零開始使用現代框架,但從舊系統複製邏輯(如果可能的話)

  • 保留舊系統的,只是更新前端頁面,給它一個更現代的外觀(可能是最好的給定的時間/金錢等)

什麼是更新原有的最佳方式Java Servlet代碼轉換爲現代框架(使用現代實踐進行簡單維護,單元測試,DRY),同時保持邏輯完整?

任何見解是值得歡迎的。

回答

3

重構地獄,致力於一致的設計風格,作爲初步將其移植到精神上最接近風格的任何風格的框架。

「重構」我的意思是 - 在戰略位置,單元以及功能上引入測試,並像瘋狂一樣努力減少重複,並依靠這些測試。

0

的最好方法:使用現有應用程序的功能規範,並從頭開始構建新的應用程序(與一些可能的切正貼重用或實際的類重用在有意義)。

根據我的經驗,試圖將寫得不好的遺留應用程序硬塞進新框架或試圖用良好的代碼「包裝」垃圾代碼只會導致長期維護更困難和昂貴的事情。

1

這種問題沒有明確的答案,但我的主要技巧是首先閱讀主題。知道他們正在談論的東西的人閱讀書籍。例如Code Complete(史蒂夫麥康奈爾),第2章。 24重構。

  • 保存你開始

  • 保持重構小

  • 代碼做一個重構同時

  • 重構,當你添加一個套路,階級,修復缺陷

  • 定義乾淨和醜陋的代碼之間的接口

  • ...

還有許多其他的資源,印刷和網上,你可以使用。之後,如果你有更具體的問題,你可以使用SO這樣的網站來獲得比這個更有用的答案。

0

這只是我的意見,因爲我認爲這個問題是什麼人支付昂貴顧問來解決問題(通常最終只會浪費錢,例如參見dailywtf.com)。

我認爲它不值得徹底重寫,因爲在重寫過程中,你可能還必須保持原來的應用程序*,因此重寫將有一個移動的目標。更好的方法是在重構時償還代碼債務 - 即,它將花費2倍,3倍甚至10倍的努力來實現一個簡單功能,僅僅是因爲以一種很好的方式進行重構就會涉及重構堆。但是這項工作是必要的,因爲這個應用程序所欠的債務很高,最終必須以某種方式支付。

它可能會傷害,但好的藥物會傷害。

  • 如果你給出的時間塊好做了改寫,即原來的應用程序被凍結,而不是維持(甚至沒有bug修復),那麼它可能工作作爲一個完全重寫到您認爲什麼框架適合。但我非常懷疑在任何機構都會出現這種情況。