最近幾個(gè)月利用業(yè)余時(shí)間完成了一個(gè)項(xiàng)目,。這個(gè)項(xiàng)目其實(shí)是2008年我在前公司做的一個(gè)web項(xiàng)目,。后來(lái)客戶(hù)想要對(duì)項(xiàng)目做升級(jí),,牽扯到一些功能的變動(dòng)及界面的修改。由于當(dāng)時(shí)整個(gè)項(xiàng)目的架構(gòu)和主要編碼都是我做的,,所以前公司老總喊我來(lái)接這個(gè)項(xiàng)目,,使用業(yè)余時(shí)間完成。我考慮了一下答應(yīng)了,。為了掙點(diǎn)錢(qián)養(yǎng)家就拼點(diǎn)唄,。
幾個(gè)月前在接這個(gè)活前,我曾寫(xiě)過(guò)一篇文章如果讓我完善幾年前的一個(gè)項(xiàng)目,,我會(huì)做哪些改進(jìn)?,。主要從工程實(shí)踐的角度講述了我將進(jìn)行那些改進(jìn)。
經(jīng)過(guò)幾個(gè)月的辛苦開(kāi)發(fā),,終于完成了這次的功能升級(jí),,拿到了報(bào)酬。針對(duì)這種遺留系統(tǒng),,我來(lái)談?wù)勎揖唧w都進(jìn)行了那些改動(dòng),。
不用動(dòng)的地方盡量不動(dòng)。由于代碼是08年我作為實(shí)習(xí)生寫(xiě)的,,那代碼自然慘不忍睹,,有些地方寫(xiě)的非常累贅。經(jīng)過(guò)幾年打磨的我對(duì)代碼質(zhì)量要求已經(jīng)上升了很多個(gè)層次,,看到這些爛代碼不禁忍不住要重構(gòu),。但是我忍住了,因?yàn)檫@是個(gè)遺留系統(tǒng),,當(dāng)時(shí)就沒(méi)有寫(xiě)單元測(cè)試,,所以重構(gòu)過(guò)程肯定風(fēng)險(xiǎn)較大。另外工期只能用業(yè)余時(shí)間,,要以新需求為主,,只改開(kāi)發(fā)新需求時(shí)需要碰的那些代碼。
使用github作為代碼托管服務(wù),。即使是一個(gè)人開(kāi)發(fā),也需要使用源代碼管理工具,,這樣做起來(lái)自己心里才有底,。而github自己用了好幾年了,非常好用,,而且自己買(mǎi)了github的會(huì)員,。所以這次把代碼以私有倉(cāng)庫(kù)的方式放在上面。隨時(shí)寫(xiě),,隨時(shí)提交,,比自己搭建源代碼服務(wù)器方便的多,。
引入bootstrap框架作為前端框架。這次升級(jí)一個(gè)重要任務(wù)是對(duì)前端進(jìn)行優(yōu)化,,使其能兼容多個(gè)瀏覽器,。08年的時(shí)候大家都在用IE6,IE7,,IE8都很少有人用,。過(guò)了這么多年網(wǎng)站早都不能兼容現(xiàn)代瀏覽器了,而且屏幕分辨率適配也很差勁,。作為一個(gè)前端菜鳥(niǎo),,我只花了一點(diǎn)時(shí)間學(xué)習(xí)了bootstrap,就快速把它引入到了我的項(xiàng)目中,。我基本上把以前的css,、js代碼都刪除了,使用bootstrap輕輕松松的就把這個(gè)老站改成了一個(gè)兼容多個(gè)瀏覽器,,多種屏幕尺寸的網(wǎng)站,。
升級(jí).net中使用的各種組件。這個(gè)網(wǎng)站使用的是WebForm框架,,版本為2.0,。我發(fā)現(xiàn)在現(xiàn)代瀏覽器下WebForm組件生成的前端HTML,CSS及JavaScript存在大量不兼容的問(wèn)題。網(wǎng)站頁(yè)面變得很不穩(wěn)定,。當(dāng)升級(jí)到4.0平臺(tái)后,,問(wèn)題得到大大改善。另外我還使用了AjaxControllToolKit組件,,發(fā)現(xiàn)在某些瀏覽器下(比如360瀏覽器)頁(yè)面局部刷新不了,。所以我也一并升級(jí)到了最新的15.3版本。雖然把各種組件都升級(jí)了,,還存在一些JavaScript問(wèn)題,,比如日歷選擇框無(wú)法正常顯示與選擇。我采用的方法就是拋棄掉舊的JS代碼,,尋求成熟的JS框架來(lái)替代,。比如使用bootstrap-datepicker組件來(lái)實(shí)現(xiàn)日歷框的選取。
采用最新的Visualstudio編輯器,。微軟終于想通了,,與其讓我們天朝成天用盜版的VisualStudio,不如直接開(kāi)放一個(gè)社區(qū)版出來(lái),。我下載了VisualStudio2013社區(qū)版,,并給其裝上了ReSharper組件。由于ReSharper是收費(fèi)的,但是有差不多1個(gè)月的試用期,。之前一直使用Intellij開(kāi)發(fā)工具做開(kāi)發(fā),,能在VisualStudio2013中使用它也是覺(jué)得很爽。
引入了package管理工具,,使用Nuget來(lái)安裝,、管理各種項(xiàng)目依賴(lài)。使用過(guò)程中我發(fā)現(xiàn)Nuget沒(méi)有Java平臺(tái)下的Maven或Gradle強(qiáng)大,。很多依賴(lài)都不是最新版本,,管理理念也不太一樣。不過(guò)聊勝于無(wú)吧,。像bootstrap等前端組件以及ajaxcontrolToolkit等后端組件我都是通過(guò)Nuget來(lái)管理的,。
使用事務(wù)機(jī)制處理系統(tǒng)中的核心邏輯。這個(gè)系統(tǒng)是一個(gè)編碼管理系統(tǒng),,主要處理炸藥,、雷管編碼的整個(gè)流通過(guò)程。系統(tǒng)有的時(shí)候會(huì)出現(xiàn)重復(fù)編碼的情況,,比如一發(fā)雷管的編碼同時(shí)存在于庫(kù)存中和消耗庫(kù)中,。這是由于雷管從在庫(kù)狀態(tài)轉(zhuǎn)換為消耗狀態(tài)時(shí)出了問(wèn)題,并沒(méi)有在庫(kù)存中刪除該編碼,。這次升級(jí)我把類(lèi)似的邏輯都用事務(wù)來(lái)處理,,一旦發(fā)生異常就會(huì)整體回滾,不會(huì)造成臟數(shù)據(jù)的情況,。
其實(shí)我還想引入的幾個(gè)點(diǎn)由于種種原因都沒(méi)有完成,。
沒(méi)有添加單元測(cè)試。本來(lái)想給VistualStudio2013添加單元測(cè)試框架,,奈何花了幾個(gè)小時(shí)都沒(méi)整好,。另外工程目錄方面也需要進(jìn)行一定的調(diào)整來(lái)引入測(cè)試項(xiàng)目,整了一次沒(méi)搞定后也不了了之,。由于這次升級(jí)80%功能是前端頁(yè)面的改進(jìn),,涉及后端代碼修改的不多,所以沒(méi)有單元測(cè)試的情況下修改已有代碼還是比較有信心的,。
沒(méi)有引入持續(xù)集成,。還是時(shí)間成本的原因。畢竟這個(gè)活都是使用業(yè)余時(shí)間完成的,,搭建C#棧的CI估計(jì)要花上好幾天,,所以最后并未實(shí)現(xiàn)。
自動(dòng)化部署,。之前對(duì).NET下的網(wǎng)站的部署都是手動(dòng)的,將編譯生成后的文件復(fù)制到服務(wù)器上,,暫停IIS,,重載文件,,重新啟動(dòng)IIS。其實(shí)這些都是可以自動(dòng)化完成的,,自己沒(méi)花時(shí)間研究,,所以也未實(shí)現(xiàn)。
使用成熟的log框架給系統(tǒng)關(guān)鍵邏輯打上log,。這個(gè)純粹是自己懶,,不想做。因?yàn)榧?/span>log方便自己以后排查錯(cuò)誤,,對(duì)客戶(hù)來(lái)說(shuō)沒(méi)有任何影響,,自己就懶得弄了。
沒(méi)有引入自動(dòng)化測(cè)試,。還是時(shí)間成本的原因,,編寫(xiě)web的自動(dòng)化測(cè)試太花時(shí)間了,所以只能舍棄,。
原文:無(wú)敵北瓜 鏈接:http://www.cnblogs.com/huang0925/p/4505455.html
|