亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用JBuilder2005實現重構之認識重構

2019-11-18 11:17:13
字體:
來源:轉載
供稿:網友

  為什么要重構
  從Martin Fowler所著的《重構--改善既有代碼的設計》一書連續兩年成為最暢銷的計算機圖書之一,就可以知道重構給程序員所帶來的欣喜程度了。
  
  那么什么是重構呢?重構就是在不改變軟件現有功能的基礎上,通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。
  
  也許有人會問,為什么不在項目開始時多花些時間把設計做好,而要以后花時間來重構呢?要知道一個完美得可以預見未來任何變化的設計,或一個靈活得可以容納任何擴展的設計是不存在的。系統設計人員對即將著手的項目往往只能從大方向予以把控,而無法知道每個細枝末節,其次永遠不變的就是變化,提出需求的用戶往往要在軟件成型后,始才開始"品頭論足",系統設計人員究竟不是先知先覺的神仙,功能的變化導致設計的調整再所難免。所以"測試為先,持續重構"作為良好開發習慣被越來越多的人所采納,測試和重構像黃河的護堤,成為保證軟件質量的法寶。
  
  通過重構可以達到以下的目標:
  
  持續偏糾和改進軟件設計
  重構和設計是相輔相成的,它和設計彼此互補。有了重構,你仍然必須做預先的設計,但是不必是最優的設計,只需要一個合理的解決方案就夠了,假如沒有重構、程序設計會逐漸腐敗變質,愈來愈像斷線的風箏,脫韁的野馬無法控制。重構其實就是整理代碼,讓所有帶著發散傾向的代碼回歸本位。
  
  使代碼更易為人所理解
  Martin Flower在《重構》中有一句經典的話:"任何一個傻瓜都能寫出計算機可以理解的程序,只有寫出人類輕易理解的程序才是優秀的程序員。"對此,筆者感慨很深,有些程序員總是能夠快速編寫出可運行的代碼,但代碼中晦澀的命名使人暈眩得需要緊握坐椅扶手,試想一個新兵到來接手這樣的代碼他會不會想當逃兵呢?
  
  軟件的生命周期往往需要多批程序員來維護,我們往往忽略了這些后來人。為了使代碼輕易被他人理解,需要在實現軟件功能時做許多額外的事件,如清楚的排版布局,簡明扼要的注釋,其中命名也是一個重要的方面。一個很好的辦法就是采用暗喻命名,即以對象實現的功能的依據,用形象化或擬人化的手法進行命名,一個很好的態度就是將每個代碼元素像新生兒一樣命名,也許筆者有點命名偏執狂的傾向,如能榮此雅號,將深以此為幸。
  
  對于那些讓人布滿迷茫感甚至誤導性的命名,需要果決地、大刀闊斧地整容,永遠不要手下留情!
  
  幫助發現隱藏的代碼缺陷
  孔子說過:溫故而知新。重構代碼時逼迫你加深理解原先所寫的代碼。筆者常有寫下程序后,卻發生對自己的程序邏輯不甚理解的情景,曾為此驚悚過,后來發現這種癥狀居然是許多程序員?;嫉?感冒"。當你也發生這樣的情形時,通過重構代碼可以加深對原設計的理解,發現其中的問題和隱患,構建出更好的代碼。
  
  從長遠來看,有助于提高編程效率
  當你發現解決一個問題變得異常復雜時,往往不是問題本身造成的,而是你用錯了方法,拙劣的設計往往導致臃腫的編碼。
  
  改善設計、提高可讀性、減少缺陷都是為了穩住陣腳。良好的設計是成功的一半,停下來通過重構改進設計,或許會在當前減緩速度,但它帶來的后發優勢卻是不可低估的。
  
  何時著手重構
  新官上任三把火,開始一個全新的項目時,程序員往往也會燃起三把火:緊鑼密鼓、腳不停蹄、加班加點,一支聲勢浩大的千軍萬"碼"夾裹著程序員激情和扣擊鍵盤的鳴金奮力前行,勢如破竹,攻城掠地,直指"黃龍府"。
  
  開發經理是這支浩浩湯湯代碼隊伍的統帥,他負責這支隊伍的命運,當齊恒公站在山頂上看到管仲練習的隊伍整潔劃一地前進時,他感嘆說"我有這樣一支軍隊哪里還怕沒有勝利呢?"。但很遺憾,你手中的這支隊伍原本只是散兵游勇,在前進中招兵買馬,不斷壯大,所以隊伍變形在所難免。當開發經理發覺隊伍變形時,也許就是克制住攻克前方山頭的誘惑,停下腳步整頓隊伍的時候了。
  
  Kent Beck提出了"代碼壞味道"的說法,和我們所提出的"隊伍變形"是同樣的意思,隊伍變形的信號是什么呢?以下列述的代碼癥狀就是"隊伍變形"的強烈信號:
  
  代碼中存在重復的代碼
  中國有118 家整車生產企業,數量幾乎等于美、日、歐所有汽車廠家數之和,但是全國的年產量卻不及一個外國大汽車公司的產量。重復建設只會導致效率的低效和資源的浪費。
  
  程序代碼更是不能搞重復建設,假如同一個類中有相同的代碼塊,請把它提煉成類的一個獨立方法,假如不同類中具有相同的代碼,請把它提煉成一個新類,永遠不要重復代碼。
  
  過大的類和過長的方法
  過大的類往往是類抽象不合理的結果,類抽象不合理將降低了代碼的復用率。方法是類王國中的諸侯國,諸侯國太大勢必動搖中心集權。過長的方法由于包含的邏輯過于復雜,錯誤機率將直線上升,而可讀性則直線下降,類的健壯性很輕易被打破。當看到一個過長的方法時,需要想辦法將其劃分為多個小方法,以便于分而治之。
  
  牽一毛而需要動全身的修改
  當你發現修改一個小功能,或增加一個小功能時,就引發一次代碼地震,也許是你的設計抽象度不夠理想,功能代碼太過分散所引起的。
  
  類之間需要過多的通訊
  A類需要調用B類的過多方法訪問B的內部數據,在關系上這兩個類顯得有點狎昵,可能這兩個類本應該在一起,而不應該分家。
  
  過度耦合的信息鏈
  "計算機是這樣一門科學,它相信可以通過添加一個中間層解決任何問題",所以往往中間層會被過多地追加到程序中。假如你在代碼中看到需要獲取一個信息,需要一個類的方法調用另一個類的方法,層層掛接,就象輸油管一樣節節相連。這往往是因為銜接層太多造成的,需要查看就否有可移除的中間層,或是否可以提供更直接的調用方法。
  
  各立山頭干革命
  假如你發現有兩個類或兩個方法雖然命名不同但卻擁有相似或相同的功能,你會發現往往是因為開發團隊成員協調不夠造成的。筆者曾經寫了一個頗好用的字符串處理類,但因為沒有及時通告團隊其他人員,后來發現項目中居然有三個字符串處理類。革命資源是珍貴的,我們不應各立山頭干革命。
  
  不完美的設計
  在筆者剛完成的一個比對報警項目中,曾安排阿朱開發報警模塊,即通過Socket向指定的短信平臺、語音平臺及客戶端報警器插件發送報警報文信息,阿朱出色地完成了這項任務。后來用戶又提出了實時比對的需求,即要求第三方系統以報文形式向比對報警系統發送請求,比對報警系統接收并響應這個請求。這又需要用到Socket報文通訊,由于原來的設計沒有將報文通訊模塊獨立出來,所以無法復用阿朱開發的代碼。后來我及時調整了這個設計,新增了一個報文收發模塊,使系統所有的對外通訊都復用這個模塊,系統的整體設計也顯得更加合理。
  
  每個系統都或多或少存在不完美的設計,剛開始可能注重不到,到后來才會慢慢凸顯出來,此時唯有勇于更改才是最好的出路。
  
  缺少必要的注釋
  雖然許多軟件工程的書籍常提醒程序員需要防止過多注釋,但這個擔心好象并沒有什么必要。往往程序員更感愛好的是功能實現而非代碼注釋,因為前者更能帶來成就感,所以代碼注釋往往不是過多而是過少,過于簡單。人的記憶曲線下降的坡度是陡得嚇人的,當過了一段時間后再回頭補注釋時,很輕易發生"提筆忘字,愈言且止"的情形。
  
  曾在網上看到過微軟的代碼注釋,其詳盡程度讓人嘆為觀止,也從中體悟到了微軟成功的一個經驗。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区制服诱惑| 久久久精品国产| 国产视频丨精品|在线观看| 欧美日韩裸体免费视频| 国产亚洲日本欧美韩国| 成人激情视频网| 久久久噜久噜久久综合| 韩国精品久久久999| 91精品国产高清久久久久久91| 欧美日韩在线一区| 国产精品观看在线亚洲人成网| 日韩中文字幕精品| 欧美在线视频一二三| 国产亚洲人成网站在线观看| 韩国精品美女www爽爽爽视频| 欧美美最猛性xxxxxx| 91国内产香蕉| 91在线播放国产| 亚洲色图激情小说| 国模精品视频一区二区| 91美女福利视频高清| 亚洲日本欧美日韩高观看| 色综合视频网站| 久久久国产一区二区| 日韩欧美高清在线视频| 欧美色道久久88综合亚洲精品| 国产精品久久久久影院日本| 欧美精品在线第一页| 精品一区二区三区三区| 成人精品aaaa网站| 国产精品视频xxxx| 久久夜精品va视频免费观看| 国产精品久久av| 国内精品模特av私拍在线观看| 欧美成人一区二区三区电影| 好吊成人免视频| 欧美专区福利在线| 亚洲电影成人av99爱色| 亚洲第一视频网| 国产午夜精品视频| 97超视频免费观看| 欧美一级电影在线| 中文字幕日韩在线视频| 亚洲qvod图片区电影| 亚洲欧美日韩在线一区| 青青久久av北条麻妃海外网| 国产成人精品999| 97视频在线观看网址| 97精品一区二区三区| 亚洲欧美激情另类校园| 日韩免费观看网站| 欧美激情a∨在线视频播放| 国产精品久久久久免费a∨大胸| 亚洲精品国产综合久久| 国产精品免费视频xxxx| 日韩精品中文字幕在线播放| 国产精品美女久久久久av超清| 欧美华人在线视频| 国产亚洲美女精品久久久| 国产精品高潮呻吟视频| 亚洲成人网久久久| 日韩美女毛茸茸| 欧美xxxx14xxxxx性爽| 久久久国产精品一区| 日韩电影中文字幕一区| 国产精品一区二区久久| 久久亚洲国产成人| 欧美黑人性生活视频| 成人久久18免费网站图片| 成人做爰www免费看视频网站| 97久久国产精品| 欧美理论电影在线播放| 日韩中文在线视频| 国产成人精品久久亚洲高清不卡| 日韩精品在线免费观看视频| 不卡av日日日| 亚洲a∨日韩av高清在线观看| 国产精品日本精品| 日韩有码在线播放| 欧美性做爰毛片| 国产精品扒开腿做| 成人黄色网免费| 国产精品视频区| 国产精品亚洲欧美导航| 亲子乱一区二区三区电影| 亚洲自拍偷拍在线| 亚州国产精品久久久| 欧美一级淫片播放口| 久久久国产在线视频| 成人在线一区二区| 91精品国产免费久久久久久| 久久精品成人欧美大片古装| 日韩中文有码在线视频| 少妇激情综合网| 不卡伊人av在线播放| 国产一区二区三区中文| 欧美性猛xxx| 欧美成人第一页| 在线看片第一页欧美| 欧美一性一乱一交一视频| 国产精品吴梦梦| 日韩欧美在线看| 91大神福利视频在线| 69av视频在线播放| 国产精品久久一区| 欧美三级欧美成人高清www| 欧美精品videosex性欧美| 伦伦影院午夜日韩欧美限制| 亚洲精品成人av| 国产日本欧美一区二区三区| 亚洲色图25p| 欧美日韩在线视频一区| 成人国产亚洲精品a区天堂华泰| 精品丝袜一区二区三区| 国产欧美va欧美va香蕉在线| 国产v综合ⅴ日韩v欧美大片| 91精品视频播放| 亚洲免费影视第一页| 91久久综合亚洲鲁鲁五月天| 亚洲成人动漫在线播放| 国产午夜一区二区| 日韩动漫免费观看电视剧高清| 欧美影院在线播放| 精品久久久久久国产| 国产女人精品视频| 伊人久久男人天堂| 国产aⅴ夜夜欢一区二区三区| 精品在线欧美视频| 欧美在线视频免费观看| 国产剧情日韩欧美| 国产精品久久久91| 亚洲精品电影网在线观看| 亚洲视频欧美视频| 亚洲精品黄网在线观看| 欧美精品午夜视频| 欧美成aaa人片在线观看蜜臀| 精品久久久久久久久中文字幕| 久热精品在线视频| 国产精品成人一区二区| 日韩黄色高清视频| 欧美日韩一二三四五区| 久久香蕉精品香蕉| 精品福利免费观看| 亚洲最新视频在线| 国产精品久久99久久| 精品国产乱码久久久久久天美| 91探花福利精品国产自产在线| 久久夜色撩人精品| 91麻豆国产语对白在线观看| 日本a级片电影一区二区| 国产精品av在线播放| 亚洲成人激情小说| 久久久久国产精品一区| 欧美最猛性xxxxx亚洲精品| 欧美精品福利在线| 色综合老司机第九色激情| 伊人久久久久久久久久久| 久久亚洲精品中文字幕冲田杏梨| 日韩亚洲欧美中文高清在线| 国产69精品久久久久久| 亚洲乱码国产乱码精品精天堂| 2019av中文字幕| 91香蕉亚洲精品| 久久精品国产精品亚洲|