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

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

編寫高質量的代碼——從命名入手

2019-11-14 15:52:11
字體:
來源:轉載
供稿:網友

作者: Johnny.Liang  發布時間: 2015-05-28 17:48  閱讀: 3444 次  推薦: 30

筆者從事開發多年,有這樣一種感覺,查看一些開源項目,如SPRing、Apache Common等源碼是一件賞心悅目的事情,究其原因,無外兩點:1)代碼質量非常高;2)命名特別規范(這可能跟老外的英語水平有關)。

  要寫高質量的代碼,不是一件容易的事,需要長年累月的鍛煉,是一個量變到質變的過程,但要寫好命名,只需要有比較好的英語語法基礎和一種自我意識即可輕松達到。本博文將會結合本人的開發經驗,總結出若干命名規則,這些命名規則純屬個人的使用習慣,不代表是一種理想的規則,在這里列舉出來,供大家交流討論。

  1. 切忌使用沒有任何意義的英語字母進行命名

for(int i=0; i<10; i++) {    //...}

  這是在很多教java基本語法的書上常見的代碼片斷,作為教學材料,這樣寫無可厚非,但作為真正的代碼編寫,程序員必須要養成良好的習慣,不要使用這種沒有任何含義的命名方式,這里可以使用“index”。

  2. 切忌使用拼音,甚至是拼音首字母組合

cishu =5;  // 循環的次數zzje = 1000.00;  // 轉賬金額

  筆者在做代碼檢查的時候,無數次遇到過這樣的命名,使人哭笑不得。

  3. 要使用英文,而且要使用準確的英語,無論是拼寫還是語法

  • 名詞單數,必須使用單數英文,如Account、Customer。
  • 對于數組,列表等對象集合的命名,必須使用復數,而且最好按照英文的語法基礎知識使用準確的復數形式,如 List<Account> accounts、Set<Strategy> strategies。
  • 對于boolean值的屬性,很多開發人員習慣使用isXXX,如isClose(是否關閉),但這里有兩點建議:1)最好不要帶“is”,因為JavaBean的規范,為屬性生成get/set方法的時候,會用“get/set/is”,上面的例子,生成get/set方法就會變成“getIsClose/isIsClose/getIsClose”,非常別扭;2)由于boolean值通常反映“是否”,所以準確的用法,應該是是用“形容詞”,上面的例子,最終應該被改為 closed,那么get/set方法就是“getClosed/isColsed/setClosed”,非常符合英語閱讀習慣。

  4. 方法名的命名,需要使用“動賓結構短語”或“是動詞+表語結構短語”

  筆者曾看到過千奇百怪的方法命名,有些使用名詞,有些甚至是“名詞+動詞”,而且,如果賓語是一個對象集合,還是最好使用復數。

createOrder(Order order) //good    orderCreate(Order order) //badremoveOrders(List<Order> orders) //good removeOrder(List<Order> order) //bad

  5. 對于常見的“增刪改查”方法,命名最好要謹慎

  • 增加:最常見使用create和add,但最好根據英語的語義進行區分,這有助于理解,create代表創建,add代表增加。比如,要創建一個Student,用createStudent要比用addStudent好,為什么?想想如果有個類叫Clazz(班級,避開Java關鍵字),現在要把一個Student加入到一個Clazz,Clazz很容易就定義了一個 addStudent(Student student)的方法,那么就比較容易混淆。
  • 修改:常見的有alter、update、modify,個人覺得modify最準確。
  • 查詢:對于獲取單個對象,可以用get或load,但個人建議用get,解釋請見第7點的說明;對于不分條件列舉,用list;對于有條件查詢,用search(最好不要用find,find在英文了強調結果,是“找到”的意思,你提供一個“查詢”方法,不保證輸入的條件總能“找到”結果)。
  • 刪除:常見的有delete和remove,但刪除建議用delete,因為remove有“移除”的意思,參考Clazz的例子就可以理解,從班級移除一個學生,會用removeStudent。

  6. 寧愿方法名冗長,也不要使用讓人費解的簡寫

  筆者曾經遇到一個方法,判斷“支付賬戶是否與收款賬戶相同”,結果我看到一個這樣的命名:

checkIsOrderingAccCollAccSame(...)

  很難理解,我馬上把它改為:

isOrderingAccountSameAsCollectionAccount(...)

  雖然有點長,但非常容易閱讀,而且這種情況總是出現得比較少。

  7. 如果你在設計業務系統,最好不要使用技術化的術語去命名

  筆者曾經工作的公司曾經制訂這樣的命名規則,接口必須要以“I”開頭,數據傳輸對象必須以“DTO”作為后綴,數據訪問對象必須以“DAO”作為后綴,領域對象必須以“DO”作為后綴。我之所以不建議這種做法,是希望設計人員從一開始就引導開發人員,要從“業務”出發考慮問題,而不要從“技術”出發。所以,接口不需要非得以“I”開頭,只要其實現類以“Impl”結尾即可(注:筆者認為接口是與細節無關的,與技術無關,但實現類是實現相關的,用技術化術語無可口非);而數據傳輸對象,其實無非就是保存一個對象的信息,因此可以用“**Info”,如CustomerInfo;領域對象本身就是業務的核心,所以還是以其真實名稱出現,比如Account、Customer;至于“DAO”,這一個詞來源于J2ee的設計模式,筆者在之前的項目使用“***Repository”命名,意味“***的倉庫”,如AccountRepository,關于“Repository”這個詞的命名,是來源于Eric Evans的《Domain-Driven Design》一書的倉庫概念,Eric Evans對Repository的概念定義是:領域對象的概念性集合,個人認為這個命名非常的貼切,它讓程序員完全從技術的思維中擺脫出來,站在業務的角度思考問題。說到這里,可能有人會反駁:像Spring、Hibernate這些優秀的框架,不是都在用“I”作為接口開頭,用“DAO”來命名數據訪問對象嗎?沒錯!但千萬別忽略了語義的上下文,Spring、Hibernate框架都是純技術框架,我這里所說的場景是設計業務系統。

  8. 成員變量不要重復類的名稱

  例如,很多人喜歡在Account對象的成員變量中使用accountId,accountNumber等命名,其實沒有必要,想想成員變量不會鼓孤立的存在,你引用accountId,必須是account.accountId,用account.id已經足夠清晰了。

  “勿以善小而不為,勿以惡小而為之”、“細節決定成敗”,有太多的名言告訴我們,要注重細節。一個優秀的程序員,必須要有堅實的基礎,而對于命名規則這樣容易掌握的基礎,我們何不現行?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97超级碰碰人国产在线观看| 热re91久久精品国99热蜜臀| 日本一区二三区好的精华液| 欧美日韩国产va另类| 成人福利视频在线观看| 亚洲欧美一区二区三区四区| 亚洲精品国产精品国自产在线| 久久久久中文字幕2018| 午夜精品久久久久久久99热| 亚洲精品99久久久久中文字幕| 国产97人人超碰caoprom| 久久免费国产视频| 久久久女人电视剧免费播放下载| 国产精品久久久久久搜索| 久久久久久久久久久久av| 亚洲小视频在线| 在线免费观看羞羞视频一区二区| 亚洲欧美日韩精品久久| 欧美黑人xxxⅹ高潮交| 久久夜色精品国产欧美乱| 成人激情视频在线观看| 尤物99国产成人精品视频| 亚洲欧美色图片| 91情侣偷在线精品国产| 欧美一区二区三区四区在线| 亚洲精品女av网站| 日韩在线视频免费观看| 亚洲精品91美女久久久久久久| 国产成人短视频| 日韩中文字幕亚洲| 91av在线视频观看| 国产精品中文字幕在线| 成人两性免费视频| 日韩成人av网址| 国产男人精品视频| 亚洲精品美女久久| 亚洲人成绝费网站色www| 正在播放欧美一区| 国产精品99蜜臀久久不卡二区| 国产精品视频公开费视频| 国产亚洲一区二区在线| 91tv亚洲精品香蕉国产一区7ujn| 97视频在线免费观看| 亚洲视频国产视频| 欧美性猛交xxxx黑人| 国语自产精品视频在免费| 国产精品一区=区| 国产精品无av码在线观看| 精品性高朝久久久久久久| 久久精品国产久精国产一老狼| 国内久久久精品| 色偷偷88888欧美精品久久久| 亚洲国产小视频在线观看| 日韩hd视频在线观看| 国语自产精品视频在线看| 久久网福利资源网站| 欧美亚洲视频一区二区| 精品亚洲男同gayvideo网站| 成人a视频在线观看| 九九九久久久久久| 国产成人精品久久| 国产69精品久久久久久| 狠狠色狠色综合曰曰| 亚洲美女激情视频| 日本亚洲欧美三级| 国语自产偷拍精品视频偷| 亚洲国产美女久久久久| 久久深夜福利免费观看| 精品女同一区二区三区在线播放| 亚洲性猛交xxxxwww| 久久精品国产久精国产一老狼| 亚洲第一福利在线观看| 国产精品一区二区久久国产| 国产精品国产自产拍高清av水多| 色先锋久久影院av| 国模视频一区二区三区| 欧美日韩性视频在线| 成人av在线亚洲| 色婷婷av一区二区三区久久| 亚洲美女av黄| 国产精品99免视看9| 国模精品一区二区三区色天香| 亚洲欧美国产精品久久久久久久| 亚洲高清在线观看| 97热精品视频官网| 免费91麻豆精品国产自产在线观看| 中文字幕亚洲国产| 亚洲大胆人体av| www.国产一区| 一区二区三区 在线观看视| 亚洲网站视频福利| 国产美女久久精品香蕉69| 国产日韩欧美在线播放| 亚洲а∨天堂久久精品9966| 亚洲精品久久久久中文字幕二区| 最近2019年好看中文字幕视频| 国产成人在线一区二区| 久久五月天色综合| 日韩av在线天堂网| 亚洲欧洲日韩国产| 26uuu亚洲国产精品| 成人黄色午夜影院| 亚洲欧美一区二区精品久久久| 欧美乱人伦中文字幕在线| 97精品国产97久久久久久春色| 国产精品久久久久久亚洲调教| 日韩av一区二区在线| 国产美女直播视频一区| 久久精品国产69国产精品亚洲| 精品视频久久久久久| 国产美女精品免费电影| 欧美黄色小视频| 亚洲风情亚aⅴ在线发布| 日韩av网站大全| 粉嫩老牛aⅴ一区二区三区| 精品女同一区二区三区在线播放| 日韩av在线网址| 久久久久久久999精品视频| 8x海外华人永久免费日韩内陆视频| 欧美交受高潮1| 538国产精品一区二区在线| 国产精品成熟老女人| 欧美性猛交xxxx免费看久久久| 亚洲一区国产精品| 久久久国产在线视频| 91精品国产高清自在线看超| 精品久久久久久久久国产字幕| 最近2019中文字幕一页二页| 亚洲第一精品电影| 亚洲欧洲日产国码av系列天堂| 91香蕉亚洲精品| 亚洲品质视频自拍网| 国产z一区二区三区| 亚洲国产精品久久久| 美女性感视频久久久| 欧美激情a∨在线视频播放| 国产一区二区三区在线免费观看| 欧美电影在线免费观看网站| www亚洲欧美| 日韩一区二区三区国产| 不卡伊人av在线播放| 久久精品视频亚洲| 亚洲网站在线观看| xxx一区二区| 国产精品自拍网| 久久中文字幕视频| 久久久99免费视频| 国产精品久久久久77777| 懂色av影视一区二区三区| 亚洲精品视频中文字幕| 国产日韩欧美自拍| 欧美激情一区二区三区高清视频| 久久久久久久久久久av| 亚洲美女精品成人在线视频| 一区二区三区久久精品| 日韩成人在线视频网站| 少妇久久久久久| 精品国产一区二区三区久久| 麻豆国产精品va在线观看不卡| 国产日韩欧美在线观看| 欧美色播在线播放| 精品高清一区二区三区| 亚洲成人网在线| 91精品久久久久久久|