设计思想之六大设计原则
六大設計原則
1.單一職責原則
定義:有且只有一個原因引起類的變更。
比如用戶類中定義了用戶屬性和行為,應該把用戶信息抽取成一個DO,行為抽象成Biz接口方法。
歧義點:有時為了適配單一職責原則,會將老接口一分為二,通過一個實現類去實現兩個接口,可能會覺得實現類的引起變化原因有兩個,
需要注意的是我們是面向接口編程,而不是面向實現類編程,對外暴露的是接口而不是實現類。
我的思考:生搬硬套單一職責會造成類的劇增,需要視情況而定,接口一定要做到單一原則,實現類與接口保持一直,一一對應比較好。
2.里氏替換原則
通俗的講:只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常;反之,有子類出現的地方,父類未必就可以適應。
里氏替換原則為良好的繼承定義了一個規范,包含了四層含義:
1.子類必須完全實現父類的方法。在類中調用其他類時,務必使用父類或接口,如果不能使用父類或接口,則說明類的設計已經違背了LSP原則
2.子類可以有自己的個性
3.覆蓋或者實現父類方法時輸入參數要放大,否則會混淆。
4.覆蓋或實現父類方法時輸出結果要縮小。
我的思考:接口內調用其他類時要使用父類,提高通用性,如果是子類,那么繼承父類的其他子類無法使用,子類可以基于父類基礎上,擴展自己的功能;3/4是1的保障。
3.依賴倒置原則
三層含義:
1.高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象。(抽象即接口或抽象類)
2.抽象不應該依賴細節。(細節即實現類)
3.細節應該依賴抽象。
在java語言中的表現就是:
1.模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關系,其依賴關系是通過接口或抽象類產生的。
2.接口或抽象類不依賴于實現類。
3.實現類依賴接口或抽象類。
我的思考:
依賴正置:面向實現編程。
依賴倒置:面向接口編程。
舉例:駕駛員駕駛汽車,如果只有一個奔馳汽車類,而不采取汽車類接口的方式,擴展性很差。
1.業務開發時,對外暴露的功能一定盡可能具備接口或抽象類,這樣才能實現測試開發等多端工作解耦。
2.變量的表面類型盡量是接口或者抽象類。
3.盡量不要從具體類中派生新的類,因為如果派生類可能會繼承具體類中所有業務邏輯,一旦具體類需要修改,就需要同步測試旗下所有派生類。
4.接口隔離原則
定義:類間的依賴關系應該建立在最小的接口上。
我的思考
1.接口盡量細化,面向業務開發,考慮通用性,比如定義了一個美女類接口,有面孔、身材、氣質三個方法,但是隨著審美的不同,可能氣質并非定義美女的要素,那么繼承美女類的接口就沒必要實現氣質方法,所以應該按照外貌和氣質的維度拆分成兩個接口,更加靈活。
2.盡量保證接口的純潔性,根據接口隔離原則拆分接口時,首先保障滿足單一職責原則,否則會派生大量無用類。
3.接口要高內聚,盡量減少public方法的透出,接口是對外的承諾,承諾越少,維護成本越低。
4.一個接口只服務于一個子模塊或業務邏輯。
5.迪米特法則
即最少知識原則,一個對象應該對其他對象有最少的了解,通俗地講,一個類應該對自己需要耦合或調用的類知道的最少,不需要關心被耦合的類的內部有多復雜的業務邏輯。
我的思考:
1.在系統設計時要進行反復衡量,是否還可以再減少public方法和屬性,是否可以修改為private和package-private等訪問權限,是否可以加上final關鍵字等。
2.高內聚,低耦合
6.開閉原則
一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉。
開閉原則對擴展開放,最修改關閉,并不意味著不做任何的修改,底層模塊的變更,必然要有高層模塊進行耦合,否則就是一個孤立無意義的代碼片段。
抽象約束:
1.通過接口或抽象類約束擴展,對擴展進行邊界限定,不允許出現接口或抽象類中不存在的public方法。
2.引用對象盡量使用接口或抽象類,而不是實現類。
3.抽象層盡量保持穩定,一旦確定不允許修改。
六大設計原則總結
六大原則首字母聯合起來是SOLID(穩定),建立穩定、靈活、健壯的系統設計,是我們每一個程序員的義務。
接口設計層面:
1.高內聚,低耦合,盡量減少public方法暴露。
2.接口/抽象類是一種約定、一種契約,定義之后盡量不要進行修改。
3.一個接口中的方法不要太多,在遵循單一職責原則基礎上,按照接口隔離原則進行拆分,接口隔離是與業務相關的,比如要給外部運營商提供一個獲取token的方法,但是這個方法所在的接口中還有其他十幾個對運營商無意義的方法,如果運營商不小心實現了其中的方法并調用,會造成不必要的問題。
4.接口設計盡量細化,不要把聚合太多的業務方法,雖然按照當前集團開發規則是一個接口對應一個實現類,但是如果遇到一個接口對應多個實現類,如果多個業務方法都聚合在一個接口中,就會違反接口隔離原則。
方法內部設計層面:
1.引用變量盡量使用抽象類/接口,遵循里氏替換原則。
2.盡量內縮方法訪問權限。
總結
以上是生活随笔為你收集整理的设计思想之六大设计原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《仙境传说RO:新启航》新手开荒攻略-仙
- 下一篇: WP8.1系统中文版截图曝光 新增感知功