本文是從 S.O.L.I.D. Class Design Principles 這篇文章翻譯而來。
本文是由敏捷宣言簽署人之一、《 Clean Code(代碼整潔之道)》一書的作者Robert C. Martin為他的《Applying Principles and Patterns》這本書搜集整理而來。
單一責(zé)任原則(SRP)
只有一個(gè)理由去修改一個(gè)類。例如,如果一個(gè)業(yè)務(wù)規(guī)則的改變會(huì)導(dǎo)致這個(gè)類的修改,那么,數(shù)據(jù)庫(kù)、界面、報(bào)表格式或系統(tǒng)任何其它的部分的改變都不該迫使這個(gè)類做修改。
開發(fā)/關(guān)閉原則(OCP)
軟件構(gòu)成(類,模塊,方法等)向擴(kuò)展行為開放,向修改行為關(guān)閉。
Liskov替換原則(LSP)
子類必須能夠用來當(dāng)作基類使用。如果類A繼承類B,任何能使用A的地方,B也同樣可以使用。例如,是否還記得,正方形可以看作是矩形!當(dāng)進(jìn)行擴(kuò)展 時(shí):前提條件不許繞過,后置條件不能放寬限制,可見常量不能被修改(?)。常量:在擴(kuò)展之前或之后,用戶都需要依靠這個(gè)常量來傳遞信息。正確的使用set 形式的繼承關(guān)系。不遵守set語(yǔ)義是非常危險(xiǎn)的。歸納:使用超類的引用的任何上下文中也可以使用其子類的引用替代。這個(gè)原則極大的限制了在純擴(kuò)展(繼承) 機(jī)制里可以做的事情。不遵守會(huì)帶來風(fēng)險(xiǎn)。
接口分離原則(ISP)
一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該限制在最小化的接口上。
反向依賴原則(DIP)
依賴抽象層(接口),而不是具體類。
其它重要原則
Demeter定律
也被稱做封鎖信息原則:只跟朋友交流
一個(gè)對(duì)象O的任何一個(gè)方法M只能調(diào)用下列類型的對(duì)象的方法:
- 它自己
- 它的參量
- 它創(chuàng)建/實(shí)例化的對(duì)象
- 它的直接組件對(duì)象
參考
好萊塢原則
不要調(diào)用我,我會(huì)調(diào)用你的。
不要自我重復(fù)(DRY)
去掉重復(fù)代碼。
對(duì)接口編程,而不是對(duì)實(shí)現(xiàn)
反向依賴的另外一種說法。
你不需要它(YAGNI)
不要添加你“認(rèn)為以后可能有用”的代碼。只在“事到臨頭”時(shí)才添加代碼。
簡(jiǎn)單化,傻瓜化(KISS)
讓它能工作的最簡(jiǎn)單的方法是什么?