原文鏈接: http://tieba.baidu.com/p/5057895435?pn=1
優(yōu)秀的代碼基本遵循這四個(gè)特性:可維護(hù)性、可擴(kuò)展性繁扎、可讀性和可移植性卢佣。
1.代碼格式,駝峰標(biāo)識(shí)嗜憔,縮進(jìn)杜跷,命名規(guī)范:
建議使用一致的代碼格式,采用駝峰命名法歪架,統(tǒng)一的縮進(jìn)風(fēng)格股冗,并遵循良好的命名規(guī)范,以提高代碼的可讀性和蚪。
2.寫代碼時(shí)請(qǐng)先想后寫止状,不要邊想邊寫:
強(qiáng)調(diào)在寫代碼之前先進(jìn)行思考,明確功能需要使用哪些類攒霹,類與類之間的關(guān)系是什么怯疤,確保在開始編寫代碼之前有清晰的設(shè)計(jì)思路。
3.一個(gè)類里請(qǐng)不要寫太多方法(實(shí)體類除外):
提倡單一職責(zé)原則催束,一個(gè)類應(yīng)該有一個(gè)單一的責(zé)任集峦。在類中限制方法數(shù)量,保持高內(nèi)聚性抠刺,提高代碼的可維護(hù)性和可讀性塔淤。
4.一個(gè)方法里不要寫太多代碼:
強(qiáng)調(diào)方法的簡(jiǎn)潔性和可維護(hù)性,一個(gè)方法應(yīng)該專注于完成一個(gè)特定的任務(wù)速妖,不要將過多的邏輯堆積在一個(gè)方法中高蜂。
5.當(dāng)一段代碼被你復(fù)制到多個(gè)地方使用時(shí),請(qǐng)封裝這段代碼:
提倡遵循“不重復(fù)原則”罕容,當(dāng)一段代碼需要在多個(gè)地方使用時(shí)妨马,將其封裝成一個(gè)方法或類,以便在多處調(diào)用杀赢。
6.繼承可以幫你節(jié)約很多代碼烘跺,但請(qǐng)盡量少用繼承:
警示過度使用繼承可能引發(fā)的問題,提倡多用組合而不是繼承脂崔,以避免繼承帶來的復(fù)雜性和脆弱性滤淳。
7.組合和繼承相反,是一種松散的結(jié)構(gòu)砌左,因此用組合來代替繼承是一種很好的設(shè)計(jì):
強(qiáng)調(diào)使用組合來構(gòu)建松散耦合的結(jié)構(gòu)脖咐,以提高系統(tǒng)的靈活性和可維護(hù)性。
8.思考一個(gè)功能時(shí)不要考慮先干什么后干什么汇歹,正確的思考方式是:
強(qiáng)調(diào)功能設(shè)計(jì)時(shí)應(yīng)該首先考慮需要使用哪些類屁擅,類與類之間的關(guān)系是什么,而不是著眼于具體的實(shí)現(xiàn)細(xì)節(jié)产弹。
9.將接口作為入?yún)⑹且环N很好的設(shè)計(jì)方式派歌,請(qǐng)?jiān)谀愕拇a中嘗試使用它:
提倡使用接口來定義入?yún)ⅲ蕴岣叽a的可擴(kuò)展性和靈活性。
10.接口職責(zé)請(qǐng)盡量單一胶果,5個(gè)接口協(xié)同完成一個(gè)功能要遠(yuǎn)遠(yuǎn)超過一個(gè)接口完成5個(gè)功能:
提倡接口的單一職責(zé)原則匾嘱,一個(gè)接口應(yīng)該只有一個(gè)理由發(fā)生變化,以降低系統(tǒng)的耦合度早抠。
11.如果你用一個(gè)字符串作為標(biāo)識(shí)霎烙,請(qǐng)嘗試把它設(shè)計(jì)成數(shù)據(jù)字典或配置文件:
建議使用數(shù)據(jù)字典或配置文件來管理字符串標(biāo)識(shí),提高代碼的可維護(hù)性和可配置性蕊连。
11.如果你實(shí)在懶得寫數(shù)據(jù)字典或配置文件請(qǐng)至少把它寫成枚舉:
即使不使用數(shù)據(jù)字典或配置文件悬垃,也建議將字符串標(biāo)識(shí)定義為枚舉,以提高代碼的可讀性和維護(hù)性甘苍。
11.如果你實(shí)在懶得寫枚舉盗忱,請(qǐng)至少把它寫成常量:
即使不使用枚舉,也應(yīng)該將字符串標(biāo)識(shí)定義為常量羊赵,以提高代碼的可維護(hù)性和防止魔法數(shù)字趟佃。
11.軟件設(shè)計(jì)中有很多原則,大部分你可以不記昧捷,但請(qǐng)務(wù)必記住其中的一個(gè)“開閉原則”:
強(qiáng)調(diào)開閉原則闲昭,即軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉靡挥。設(shè)計(jì)時(shí)應(yīng)該使系統(tǒng)具有良好的擴(kuò)展性序矩,而不是頻繁修改已有代碼。
"開閉原則"是面向?qū)ο笤O(shè)計(jì)中的一個(gè)重要原則跋破,它指導(dǎo)著軟件實(shí)體(類簸淀、模塊、函數(shù)等)應(yīng)該對(duì)擴(kuò)展開放毒返,而對(duì)修改關(guān)閉租幕。這意味著在不修改現(xiàn)有代碼的情況下,能夠通過擴(kuò)展來添加新的功能拧簸。
具體而言劲绪,當(dāng)系統(tǒng)需要進(jìn)行變更時(shí),應(yīng)該通過增加新代碼而不是修改已有代碼來實(shí)現(xiàn)盆赤。這有助于降低對(duì)現(xiàn)有代碼的影響贾富,減少引入新問題的風(fēng)險(xiǎn),同時(shí)提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性牺六。
以下是一個(gè)簡(jiǎn)單的例子來說明開閉原則:
假設(shè)有一個(gè)圖形繪制系統(tǒng)颤枪,最初只能繪制矩形:
class Rectangle {
void draw() {
// 繪制矩形的具體邏輯
System.out.println("Drawing a rectangle");
}
}
現(xiàn)在,如果需要添加對(duì)圓形的繪制支持而不修改 Rectangle 類淑际,我們可以通過創(chuàng)建新的圖形類 Circle 來實(shí)現(xiàn):
class Circle {
void draw() {
// 繪制圓形的具體邏輯
System.out.println("Drawing a circle");
}
}
通過擴(kuò)展而非修改現(xiàn)有代碼畏纲,符合開閉原則扇住。客戶端代碼可以使用這兩個(gè)類來繪制矩形和圓形霍骄,而不需要改動(dòng)原有的 Rectangle 類。這種設(shè)計(jì)使得系統(tǒng)更容易擴(kuò)展淡溯,同時(shí)不會(huì)破壞已有的功能读整。
總的來說,開閉原則的目標(biāo)是使系統(tǒng)更加靈活咱娶,能夠適應(yīng)變化米间,同時(shí)保持穩(wěn)定性。