1、能通過所有測試

2、沒有重復(fù)代碼
3、體現(xiàn)系統(tǒng)中的全部設(shè)計理念
4、包括盡量少的實體,比如類、方法、函數(shù)等。
有意義的命名 1、名副其實 2、避免誤導(dǎo)避免留下掩藏代碼被一的錯誤線索,避免使用與本意相悖的詞
避免使用某些平臺的專有名稱(hp,aix,sco,accountList等注意使用)
提防使用不同之處較小的名稱(XYZControllerForEfficientHandlingOfStrings 和 XYZControllerForEfficientStorageOfStrings)
o和0的區(qū)別使用
3、做有意義的區(qū)分不要使用數(shù)字系列命名(a1,a2,.........aN)
可以使用source和destination,函數(shù)會更可讀
不要在命名中添加廢話(NameString->Name,string就是廢話)
4、使用讀的出來的名稱 5、使用可搜索的名稱搜索數(shù)字4十分困難,命名后便于查詢
6、避免使用編碼避免把類型或作用域編進名稱里面
6.1匈牙利語標記法(不用了)
6.2成員前綴(就代碼的標志 m_dec)
6.3接口和實現(xiàn)(ShapeFactory->ShapeFactoryImp和CShapeFactory 比對接口名稱編碼好)
7、避免思維映射不應(yīng)當讓讀者在腦中把你的名稱翻譯為他們熟知的名稱
8、類名類名和對象名應(yīng)該是名詞或名詞短語,如Customer、WikiPage、Account和AddressParser。避免使用Manager、Processor、Data或Info這樣的類名。類名不應(yīng)當是動詞。
9、方法名方法名應(yīng)當是動詞或動詞短語。如postPayment、deletePage或save。屬性訪問器、修改器和斷言應(yīng)該根據(jù)其值命名。并依Javabean標準(標準的類JavaBean - _Anke - 博客園),加上get,set和is前綴。
10、別扮可愛,做到言到意到,意到言到 11、每個概念對應(yīng)一個詞給每個抽象概念選一個詞,并且一以貫之。
如:controller、manager、driver可以選擇其中一個只用
12、別用雙關(guān)語避免將同一單詞用于不同目的。同一術(shù)語用于不同概念,基本上就是雙關(guān)語了。如果遵循“一詞一意”規(guī)則,可能在好多個類里面都會有add方法。只要這些add方法的參數(shù)裂變和返回值在意義上等價。
13、使用解決方案領(lǐng)域名稱 14、使用源自所涉問題領(lǐng)域的名稱 15、添加有意義的語境 16、不要添加沒用的語境函數(shù) 1、短小函數(shù)的第一規(guī)則是要短小。第二條規(guī)則是還要更短小。
2、只做一件事函數(shù)應(yīng)該做一件事。做好這件事。只做這一件事。
3、每個函數(shù)一個抽象層級自頂向下讀代碼:向下規(guī)則。
4、switch語句 5、使用描述性的名稱 6、函數(shù)參數(shù)最理想的參數(shù)數(shù)量是0。
7、無副作用注釋注釋是一種失敗,因為注釋存在的時間越久,就離其所描述的代碼越遠,越來越變得全然錯誤。因為程序員沒有一直維護注釋
1、注釋不能美化糟糕的代碼 2、用代碼來闡述 3、好注釋法律信息:版權(quán)及著作權(quán)聲明就是必須和有理由在每個源文件開頭注釋處放置的內(nèi)容。
提供信息的注釋:用注釋來提供基本信息。
對意圖的解釋:注釋不僅提供了有關(guān)實現(xiàn)的游泳信息,還提供了某個決定后面的意圖。
闡釋:注釋把某些晦澀難明的參數(shù)和返回值的意義翻譯為某些可讀形式。
警示:用于警示其他程序員會出現(xiàn)某種后果的注釋。
TODO注釋:把TODO形式在源代碼中放置要做的工作列表。
放大:注釋可以用來放大某種看來不合理之物的重要性。
4、壞注釋1、喃喃自語:如果只是因為你自己覺得應(yīng)該添加注釋,那就是無畏之舉。
2、多余注釋:代碼已經(jīng)可以解釋的沒必要注釋。
3、誤導(dǎo)性注釋:程序員會寫出不夠精確的注釋。
4、循環(huán)式注釋:每個變量都要有注釋的規(guī)矩全然是愚蠢可笑的。
5、日志式注釋:類似git提交日志,現(xiàn)在很少了。
6、廢話注釋
7、可怕的廢話:
8、能用函數(shù)或變量時就別用注釋。
9、位置標記:
10、括號后面的注釋
11、歸屬與署名
12、注釋掉的代碼
13、HTML注釋
14、非本地信息:代碼和注釋要就近。
15、信息過多:別再注釋中添加有趣的歷史性話題或者無關(guān)的細節(jié)描述。
16、不明顯的聯(lián)系:注釋及其描述的代碼之間的聯(lián)系應(yīng)該顯而易見。
17、函數(shù)頭:選個好的函數(shù)名比寫函數(shù)頭注釋要好。
18、范例
格式目的:代碼格式關(guān)乎溝通。
垂直格式實體變量應(yīng)該在類的頂部聲明。
相關(guān)函數(shù):若某個函數(shù)調(diào)用了另一個函數(shù),就應(yīng)該把她們放在一起,而且調(diào)用者應(yīng)該盡可能放在被調(diào)用者上面。
概念相關(guān):概念相關(guān)的代碼應(yīng)該放在一起。相關(guān)性越強,彼此之間的距離就該越短。
橫向格式(80個字符)左邊和右邊,空格字符加強了分隔效果。
不必完全遵循水平對其,盡量突出重點。
進行縮緊處理。
盡量不要使用空范圍。
遵循團隊規(guī)則對象和數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)抽象 數(shù)據(jù)、對象的反對稱性過程式代碼便于在不該動既有數(shù)據(jù)結(jié)構(gòu)的前提下添加新函數(shù)。
面向?qū)ο蟠a便于在不該動既有函數(shù)的前提下添加新類。
得墨忒爾律模塊不應(yīng)了解他所操作對象的內(nèi)部情形。
1、避免火車失事代碼(回調(diào)調(diào)用函數(shù))
2、混雜:混淆有時會不幸導(dǎo)致混合結(jié)構(gòu),一半是對象,一半是數(shù)據(jù)結(jié)構(gòu)。
3、隱藏結(jié)構(gòu)
數(shù)據(jù)傳送對象錯誤處理錯誤處理很重要,但如果它搞亂了代碼邏輯,就是錯誤的做法。
使用異常而非返回碼 先寫Try-Catch-Finally語句異常的妙處之一事,他們在程序中定義了一個范圍。
try代碼塊就像是事物。catch代碼塊將程序維持在一種持續(xù)狀態(tài)。
使用不可控異常不使用拋出異常,成本太高,會導(dǎo)致拋出異常鏈。
給出異常發(fā)生的環(huán)境說明拋出的異常需要提供足夠的環(huán)境說明,以判斷錯誤的來源和處所。
依調(diào)用者需要定義異常類來源分類:來自組建還是其他地方。
類型分類:設(shè)備錯誤、網(wǎng)絡(luò)錯誤、編程錯誤
別返回null值 別傳遞null值(如非必要,盡量避免)單元測試 TDD三定律1、在編寫不能通過的單元測試前,不可編寫生產(chǎn)代碼。
2、只可編寫剛好無法通過的單元測試,不能編譯也算不通過。
3、只可編寫剛好足以通過當前失敗調(diào)試的生產(chǎn)代碼。
保持測試整潔 整潔的測試要素:可讀性
面向特定領(lǐng)域的測試語言
整潔的測試遵循的5條規(guī)則快速(Fast)測試應(yīng)該夠快。
獨立(Independent)測試應(yīng)該相互獨立。
可重復(fù)性(Repeatable)測試應(yīng)當可在任何環(huán)境中重復(fù)通過。
自足驗證(Self-Validating)測試應(yīng)該有布爾值輸出。
及時(Timely)測試應(yīng)及時編寫。
類類應(yīng)該短小
單一權(quán)責原則類或模塊應(yīng)該有且只有一條加以修改的理由。
內(nèi)聚類應(yīng)該只有少量實體變量。類中的每個方法都應(yīng)該操作一個或多個這種變量。
為了修改而組織對于多數(shù)系統(tǒng),修改將一直持續(xù)。
隔離修改。
系統(tǒng) 將系統(tǒng)的構(gòu)造與使用分開軟件系統(tǒng)應(yīng)將啟始過程和啟始過程之后的運行時邏輯分離開,在啟始過程中構(gòu)建應(yīng)用對象,也會存在互相纏結(jié)的依賴關(guān)系。
分解main將構(gòu)造與使用分開的方法之一是將全部構(gòu)造過程搬遷到main或被稱之為main的模塊中,設(shè)計系統(tǒng)的其余部分時,假設(shè)所有對象都以正確構(gòu)造和設(shè)置。
工廠依賴注入:有一種強大的機制可以實現(xiàn)分離構(gòu)造與使用,那就是依賴注入,控制反轉(zhuǎn)在依賴管理中的一種應(yīng)用手段。
擴容軟件系統(tǒng)與物理系統(tǒng)可以類比。他們的架構(gòu)都可以遞增式的增長,只要我們持續(xù)將關(guān)注恰當?shù)那蟹帧?/p>跌進 通過跌進設(shè)計達到整潔目的
簡單設(shè)計的四條規(guī)則
1、運行所有測試
2、不可重復(fù)
3、表達了程序員的意圖
4、盡可能減少類和方法的數(shù)量
以上規(guī)則按其重要程度排列
簡單設(shè)計規(guī)則1:運行所有測試 簡單設(shè)計規(guī)則2~4:重構(gòu)測試消除了對清理代碼就會破壞代碼的恐懼。
在重構(gòu)過程中,提升內(nèi)聚性,降低耦合度,切分關(guān)注面,模塊化系統(tǒng)性關(guān)注面,縮小函數(shù)和類的尺寸,選用更好的名稱等。
不可重復(fù)重復(fù)是擁有良好設(shè)計系統(tǒng)的大敵。
“小規(guī)模復(fù)用”可大量降低系統(tǒng)復(fù)雜性
表達力1、可以通過選用好名稱來表達。
2、也可以通過保持函數(shù)和類尺寸短小來表達。
3、還可以通過保持函數(shù)和類尺寸縮小來表達。
4、編寫良好的單元測試也具有表達性。
做到有表達力的最重要的方式是嘗試。
盡可能少的類和方法優(yōu)先度最低的一條。
并發(fā)編程 為什么要并發(fā) 并發(fā)是一種解耦策略。它幫助我們把做什么和何時做分解開。 并發(fā)防御原則1、單一權(quán)責原則。
方法/類/組建應(yīng)當只有一個修改的理由。
并發(fā)相關(guān)代碼有自己的開發(fā)、修改和調(diào)優(yōu)生命周期。
開發(fā)相關(guān)代碼有自己要對付的挑戰(zhàn),和非并發(fā)相關(guān)代碼不同,往往更為困難。
即便沒有周邊應(yīng)用程序增加的負擔,寫的不好的并發(fā)代碼可能的出錯方式數(shù)量也已經(jīng)足具挑戰(zhàn)性。
建議:分離并大相關(guān)代碼與其他代碼。
2、推論:限制數(shù)據(jù)作用域
會忘記保護一個或多個臨界區(qū)--破壞了修改共享數(shù)據(jù)的代碼;
得多花力氣保證一切都受到有效保護;
很難找到錯誤源,也很難判斷錯誤源。
建議:數(shù)據(jù)封裝:嚴格限制對可能破壞共享的數(shù)據(jù)的訪問。
3、推論:使用數(shù)據(jù)復(fù)本
避免共享數(shù)據(jù)的好方法之一就是一開始避免共享數(shù)據(jù)。
4、推論:線程應(yīng)盡可能的獨立
讓每個線程在自己的世界中存在,不與其他線程共享數(shù)據(jù)。
建議:嘗試將數(shù)據(jù)分解到可被獨立線程操作的獨立子集。
注釋 1、不恰當?shù)男畔?p>通常,作者、最后修改時間、SPR數(shù)等元數(shù)據(jù)不該在注釋中出現(xiàn)。注釋只應(yīng)該描述有關(guān)代碼和設(shè)計的技術(shù)型信息
2、廢棄的注釋過時、無關(guān)或不正確的注釋就是廢棄的注釋。發(fā)現(xiàn)盡快刪除,不要在廢棄的基礎(chǔ)上修改。
3、冗余注釋注釋應(yīng)該談及代碼自身沒提到的東西
4、糟糕的注釋保持簡潔,別閑扯,別畫蛇添足。
5、注釋掉的代碼看到注釋掉的代碼刪除掉。
環(huán)境 1、需要多步才能實現(xiàn)的構(gòu)建構(gòu)建系統(tǒng)應(yīng)該是單步的小操作。不應(yīng)該從源代碼控制系統(tǒng)中一小點一小點簽出代碼。不應(yīng)該需要一系列神秘指令或環(huán)境以來腳本來構(gòu)建單個元素。
不應(yīng)該四處尋找額外的小JAR、XML文件和其他系統(tǒng)所需的雜物。
你應(yīng)當能夠用單個命令簽出系統(tǒng),并用單個指令構(gòu)建他。
2、需要多步才能做到的測試你應(yīng)當能夠發(fā)出單個指令就可以運行全部測試單元。
能夠運行全部測試是如此基礎(chǔ)和重要,應(yīng)該快速、輕易和直截了當?shù)淖龅健?/p>函數(shù) 1、過多參數(shù)
函數(shù)的參數(shù)應(yīng)該盡量少。沒有參數(shù)最好,3個以上應(yīng)堅決避免。
2、輸出參數(shù)輸出參數(shù)違反直覺。
3、標識參數(shù) 4、死函數(shù)永不被調(diào)用的方法應(yīng)該丟棄。
一般性問題1、一個源文件中存在多種語言
當今的現(xiàn)代編程環(huán)境允許在單個源文件中存在的多種不同語言,但是理想的源文件包括且只包括一種語言。
2、明顯的行為未被實現(xiàn)
遵循“最小驚異原則”,函數(shù)或類應(yīng)該實現(xiàn)其他程序員有理由期待的行為
3、不正確的邊界行為
代碼應(yīng)該有正確的行為。問題是我們不能明白正確的行為有多復(fù)雜。應(yīng)該追索沒中邊界條件,并編寫測試。
4、忽視安全
忽視安全相當危險。
5、重復(fù)
每次看到重復(fù)復(fù)代碼,都代表遺漏了抽象。
6、在錯誤的抽象層級上的代碼
創(chuàng)建分離較高層級一般性概念與較低層級細節(jié)概念的抽象模型。
7、基類依賴于派生類
將概念分解到基類和派生類的最普遍的原因是較高層級基類概念可以不依賴于較低層級派生類概念。
8、信息過多
設(shè)計良好的模塊有著非常小的借口,讓你能事半功倍,不提供許多需要依靠的函數(shù),所以耦合度低。類擁有的實體變量越少越好。
9、死代碼
死代碼就是不執(zhí)行的代碼。及時刪除,防止api更新跟不上報錯。
10、垂直分隔
變量和函數(shù)應(yīng)該在靠近被使用的地方定義。本地變量應(yīng)該正好在其首次被使用的位置上面聲明,垂直距離咬斷。
11、前后不一致
從一而終。
12、混淆視聽
無用的變量,從不調(diào)用的函數(shù),沒有信息量的注釋等,都應(yīng)該是是被移除的廢物。
13、人為耦合
不互相依賴的東西不該耦合。
14、特性依戀
累的放大只應(yīng)對其所屬類中的變量和函數(shù)感興趣,不該垂青其他類中的變量和函數(shù)。
15、選擇算子參數(shù)
16、晦澀的意圖
代碼要盡可能具有表達力。寫明白。
17、位置錯誤的權(quán)責
軟件開發(fā)者作出的最重要的決定之一就是在哪里放代碼。
18、不恰當?shù)撵o態(tài)方法
19、使用解釋性變量。
解釋性變量多比少好。(key, value)
20、函數(shù)名稱應(yīng)該表達其行為
21、理解算法
22、把邏輯依賴改為物理依賴
如果某個模塊依賴于另一個模塊,依賴就該是物理上的而不是邏輯上的。依賴者模塊不應(yīng)對被依賴者模塊有假定。
23、用多態(tài)代替if\Else或switch/case
24、遵循標準約定
團隊規(guī)則,以及上述的規(guī)則
25、用命名常量替代魔術(shù)數(shù)
代碼中的原始形態(tài)數(shù)字,應(yīng)該用良好的命名的常量來隱藏它。
26、準確
27、結(jié)構(gòu)甚于約定
堅守結(jié)構(gòu)甚于約定的設(shè)計決策。
28、封裝條件
如果沒有if或while語句的上下文,布爾邏輯就很難以理解,應(yīng)該把解釋了條件意圖的函數(shù)抽離出來。
29、避免否定性條件
否定式要比肯定是難明白一些。
30、函數(shù)只該做一件事
31、掩蔽時序耦合
函數(shù)的執(zhí)行順序不應(yīng)該被掩蔽。
32、別隨意
構(gòu)建代碼需要理由,而且理由應(yīng)與代碼結(jié)構(gòu)相契合。
33、封裝邊界條件
邊界條件難以追蹤。把處理邊界條件的代碼集中到一處,不要散落于代碼中。
34、函數(shù)應(yīng)該只在一個抽象層級上
函數(shù)中的語句應(yīng)該在同一抽象層級上,該層級應(yīng)該是函數(shù)名所示操作的下一層。
35、在較高層級放置可配置數(shù)據(jù)
36、避免傳遞瀏覽
名稱1、采用描述性名稱
確認名稱具有描述性。使用描述性信息覆蓋了代碼。
2、名稱應(yīng)與抽象層級相符
不要取溝通顯示的名稱:取反應(yīng)類或函數(shù)抽象層級的名稱。
3、盡可能使用標準命名法
名稱基于既存約定或用法,就比較易于理解。
4、無歧義的名稱
選用不會混淆函數(shù)或變量意義的名稱。
5、為較大作用范圍選用較長名稱。
名稱的長度應(yīng)與作用范圍的廣泛度相關(guān)。
6、避免編碼
不應(yīng)在名稱中包括類型或作用范圍信息。
7、名稱應(yīng)該說明副作用。
測試1、測試不足
2、使用覆蓋率工具
覆蓋率工具能匯報你測試策略中的缺口。
3、別略過小測試。
4、被忽略的測試就是對不確定事物的疑問
5、測試邊界條件
算法的中間部分正確但邊界判斷錯誤的情形很常見。
6、全面測試相近的缺陷
缺陷趨向于扎堆。
7、測試失敗的模式有啟發(fā)性
8、測試覆蓋率的模式有啟發(fā)性
查看被或未被已通過的測試執(zhí)行的代碼,往往能發(fā)現(xiàn)失敗的測試為何失敗的線索。
9、測試應(yīng)該快速
慢速的測試事不會被運行的測試。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站名稱:代碼整潔之道--閱讀-創(chuàng)新互聯(lián)
標題URL:http://chinadenli.net/article38/cdocsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站設(shè)計公司、靜態(tài)網(wǎng)站、微信公眾號、虛擬主機、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容