當我完善幾年前的一個老專案時,我做了哪些改進

發表於2015-05-18

最近幾個月利用業餘時間完成了一個專案。這個專案其實是2008年我在前公司做的一個web專案。後來客戶想要對專案做升級,牽扯到一些功能的變動及介面的修改。由於當時整個專案的架構和主要編碼都是我做的,所以前公司老總喊我來接這個專案,使用業餘時間完成。我考慮了一下答應了。為了掙點錢養家就拼點唄。

幾個月前在接這個活前,我曾寫過一篇文章如果讓我完善幾年前的一個專案,我會做哪些改進?。主要從工程實踐的角度講述了我將進行那些改進。

經過幾個月的辛苦開發,終於完成了這次的功能升級,拿到了報酬。針對這種遺留系統,我來談談我具體都進行了那些改動。

1. 不用動的地方儘量不動。由於程式碼是08年我作為實習生寫的,那程式碼自然慘不忍睹,有些地方寫的非常累贅。經過幾年打磨的我對程式碼質量要求已經上升了很多個層次,看到這些爛程式碼不禁忍不住要重構。但是我忍住了,因為這是個遺留系統,當時就沒有寫單元測試,所以重構過程肯定風險較大。另外工期只能用業餘時間,要以新需求為主,只改開發新需求時需要碰的那些程式碼。

2. 使用github作為程式碼託管服務。即使是一個人開發,也需要使用原始碼管理工具,這樣做起來自己心裡才有底。而github自己用了好幾年了,非常好用,而且自己買了github的會員。所以這次把程式碼以私有倉庫的方式放在上面。隨時寫,隨時提交,比自己搭建原始碼伺服器方便的多。

3. 引入bootstrap框架作為前端框架。這次升級一個重要任務是對前端進行優化,使其能相容多個瀏覽器。08年的時候大家都在用IE6,IE7,IE8都很少有人用。過了這麼多年網站早都不能相容現代瀏覽器了,而且螢幕解析度適配也很差勁。作為一個前端菜鳥,我只花了一點時間學習了bootstrap,就快速把它引入到了我的專案中。我基本上把以前的css、js程式碼都刪除了,使用bootstrap輕輕鬆鬆的就把這個老站改成了一個相容多個瀏覽器,多種螢幕尺寸的網站。

4. 升級.net中使用的各種元件。這個網站使用的是WebForm框架,版本為2.0。我發現在現代瀏覽器下WebForm元件生成的前端HTML,CSS及JavaScript存在大量不相容的問題。網站頁面變得很不穩定。當升級到4.0平臺後,問題得到大大改善。另外我還使用了AjaxControllToolKit元件,發現在某些瀏覽器下(比如360瀏覽器)頁面區域性重新整理不了。所以我也一併升級到了最新的15.3版本。雖然把各種元件都升級了,還存在一些JavaScript問題,比如日曆選擇框無法正常顯示與選擇。我採用的方法就是拋棄掉舊的JS程式碼,尋求成熟的JS框架來替代。比如使用bootstrap-datepicker元件來實現日曆框的選取。

5. 採用最新的Visual studio編輯器。微軟終於想通了,與其讓我們天朝成天用盜版的Visual Studio,不如直接開放一個社群版出來。我下載了Visual Studio 2013社群版,並給其裝上了ReSharper元件。由於ReSharper是收費的,但是有差不多1個月的試用期。之前一直使用Intellij開發工具做開發,能在Visual Studio 2013中使用它也是覺得很爽。

6. 引入了package管理工具,使用Nuget來安裝、管理各種專案依賴。使用過程中我發現Nuget沒有Java平臺下的Maven或Gradle強大。很多依賴都不是最新版本,管理理念也不太一樣。不過聊勝於無吧。像bootstrap等前端元件以及ajaxcontrolToolkit等後端元件我都是通過Nuget來管理的。

7. 使用事務機制處理系統中的核心邏輯。這個系統是一個編碼管理系統,主要處理炸藥、雷管編碼的整個流通過程。系統有的時候會出現重複編碼的情況,比如一發雷管的編碼同時存在於庫存中和消耗庫中。這是由於雷管從在庫狀態轉換為消耗狀態時出了問題,並沒有在庫存中刪除該編碼。這次升級我把類似的邏輯都用事務來處理,一旦發生異常就會整體回滾,不會造成髒資料的情況。

其實我還想引入的幾個點由於種種原因都沒有完成。

1. 沒有新增單元測試。本來想給Vistual Studio 2013新增單元測試框架,奈何花了幾個小時都沒整好。另外工程目錄方面也需要進行一定的調整來引入測試專案,整了一次沒搞定後也不了了之。由於這次升級80%功能是前端頁面的改進,涉及後端程式碼修改的不多,所以沒有單元測試的情況下修改已有程式碼還是比較有信心的。

2. 沒有引入持續整合。還是時間成本的原因。畢竟這個活都是使用業餘時間完成的,搭建C#棧的CI估計要花上好幾天,所以最後並未實現。

3. 自動化部署。之前對.NET下的網站的部署都是手動的,將編譯生成後的檔案複製到伺服器上,暫停IIS,過載檔案,重新啟動IIS。其實這些都是可以自動化完成的,自己沒花時間研究,所以也未實現。

4. 使用成熟的log框架給系統關鍵邏輯打上log。這個純粹是自己懶,不想做。因為加log方便自己以後排查錯誤,對客戶來說沒有任何影響,自己就懶得弄了。

5. 沒有引入自動化測試。還是時間成本的原因,編寫web的自動化測試太花時間了,所以只能捨棄。

相關文章