最近幾個月利用業餘時間完成了一個項目。這個項目實際上是2008年我在前公司作的一個web項目。後來客戶想要對項目作升級,牽扯到一些功能的變更及界面的修改。因爲當時整個項目的架構和主要編碼都是我作的,因此前公司老總喊我來接這個項目,使用業餘時間完成。我考慮了一下答應了。爲了掙點錢養家就拼點唄。css
幾個月前在接這個活前,我曾寫過一篇文章若是讓我完善幾年前的一個項目,我會作哪些改進?。主要從工程實踐的角度講述了我將進行那些改進。前端
通過幾個月的辛苦開發,終於完成了此次的功能升級,拿到了報酬。針對這種遺留系統,我來談談我具體都進行了那些改動。git
1. 不用動的地方儘可能不動。因爲代碼是08年我做爲實習生寫的,那代碼天然慘不忍睹,有些地方寫的很是累贅。通過幾年打磨的我對代碼質量要求已經上升了不少個層次,看到這些爛代碼不由忍不住要重構。可是我忍住了,由於這是個遺留系統,當時就沒有寫單元測試,因此重構過程確定風險較大。另外工期只能用業餘時間,要以新需求爲主,只改開發新需求時須要碰的那些代碼。github
2. 使用github做爲代碼託管服務。即便是一我的開發,也須要使用源代碼管理工具,這樣作起來本身內心纔有底。而github本身用了好幾年了,很是好用,並且本身買了github的會員。因此此次把代碼以私有倉庫的方式放在上面。隨時寫,隨時提交,比本身搭建源代碼服務器方便的多。web
3. 引入bootstrap框架做爲前端框架。此次升級一個重要任務是對前端進行優化,使其能兼容多個瀏覽器。08年的時候你們都在用IE6,IE7,IE8 都不多有人用。過了這麼多年網站早都不能兼容現代瀏覽器了,並且屏幕分辨率適配也不好勁。做爲一個前端菜鳥,我只花了一點時間學習了bootstrap,就快速把它引入到了個人項目中。我基本上把之前的css、js代碼都刪除了,使用bootstrap輕輕鬆鬆的就把這個老站改爲了一個兼容多個瀏覽器,多種屏幕尺寸的網站。ajax
4. 升級.net中使用的各類組件。這個網站使用的是WebForm框架,版本爲2.0。我發如今現代瀏覽器下WebForm組件生成的前端HTML,CSS 及JavaScript存在大量不兼容的問題。網站頁面變得很不穩定。當升級到4.0平臺後,問題獲得大大改善。另外我還使用了 AjaxControllToolKit組件,發如今某些瀏覽器下(好比360瀏覽器)頁面局部刷新不了。因此我也一併升級到了最新的15.3版本。雖然把各類組件都升級了,還存在一些JavaScript問題,好比日曆選擇框沒法正常顯示與選擇。我採用的方法就是拋棄掉舊的JS代碼,尋求成熟的JS框架來替代。好比使用bootstrap-datepicker組件來實現日曆框的選取。bootstrap
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的自動化測試太花時間了,因此只能捨棄。