1请毛、最小復(fù)雜度
避免進(jìn)行過度設(shè)計(jì)志鞍,應(yīng)該做出簡單且易于理解的設(shè)計(jì)。
2方仿、易于維護(hù)
好的設(shè)計(jì)應(yīng)該考慮以后維護(hù)人員的工作固棚,應(yīng)設(shè)計(jì)出能自明的系統(tǒng)。
3仙蚜、松散耦合
在設(shè)計(jì)時(shí)讓程序的各個組成部分之間關(guān)聯(lián)最小此洲。
4、可擴(kuò)展性
在增強(qiáng)系統(tǒng)功能時(shí)無需破壞其底層結(jié)構(gòu)委粉。你可以改變系統(tǒng)的某一部分而不會影響到其他部分
5呜师、可重用性
可重用性意味著所設(shè)計(jì)系統(tǒng)的組成部分能在其他系統(tǒng)中重復(fù)使用。
6贾节、高扇入
高扇入是指讓大量的類使用某個給定的類汁汗。這意味著設(shè)計(jì)出的系統(tǒng)很好的利用了在較低層次的工具類。
7栗涂、低扇出
低扇出是指讓一個類里少量或適中的使用其他的類知牌。高扇出(超過7個)說明一個類大量使用了其他類,因此可能變得過于復(fù)雜斤程。
8角寸、可移植性
設(shè)計(jì)出的系統(tǒng)應(yīng)該能很方便的移植到其他環(huán)境中。
9暖释、精簡性
精簡性意味著設(shè)計(jì)出的系統(tǒng)沒有多余的代碼袭厂。伏爾泰曾說墨吓,一本書的完成不在它不能再加入任何內(nèi)容的時(shí)候球匕,而在它不能再刪去任何內(nèi)容的時(shí)候。要問這個關(guān)鍵的問題:“這雖然簡單帖烘,但把它加進(jìn)來后會損害什么”亮曹。
10、層次性
層次性意味著盡量保持系統(tǒng)各個分解層的層次性,使你能在任意的層面上觀察系統(tǒng)照卦,并得到某種具有一致性的看法式矫。設(shè)計(jì)出的系統(tǒng)應(yīng)該能在任意層次上觀察而不需要進(jìn)入其他層次。
舉例來說役耕,假設(shè)你在編寫一個新系統(tǒng)采转,其中用到很多設(shè)計(jì)不佳的舊代碼。這時(shí)你就應(yīng)該為新系統(tǒng)編寫一個負(fù)責(zé)同舊代碼交互的層瞬痘,在設(shè)計(jì)這一層時(shí)故慈,要讓它能隱藏舊代碼的低劣質(zhì)量,同時(shí)為新的層次提供一組一致的服務(wù)框全。這樣你的系統(tǒng)的其他部分就只需與這一層進(jìn)行交互察绷,而無須直接同舊代碼打交道了。在這個例子中津辩,層次化設(shè)計(jì)的益處有:(1)它把低劣代碼的爛泥潭緊閉起來拆撼;(2)如果你最終能拋棄或者重構(gòu)舊代碼,那時(shí)就不必修改除交互層之外的任何新代碼喘沿。
11闸度、標(biāo)準(zhǔn)技術(shù)
一個系統(tǒng)所依賴的外來的、古怪的系統(tǒng)越多蚜印,別人在第一次想要理解它的時(shí)候越頭疼筋岛。要盡量使用標(biāo)準(zhǔn)化的、常用的方法晒哄,讓整個系統(tǒng)給人一種熟悉的感覺睁宰。