設計原則

開閉原則(ocp)

是指”對軟件實體應當對擴展開放,對修改關閉”

  • “對擴展開放的”這意味着模塊的行爲是可以擴展的,
  • “對修改關閉”對模塊進行擴展時,不必改動模塊的源代碼及二進制碼

單一職責原則

是指”就一個類而言,應該僅有一個引起它變化的原因”

我們可以從以下兩點進行分析:

  • 1、防止相同類型的職責,分解到不同的類,即我們需要提高代碼的可重用性
  • 2、同一個類無須編制多餘的職責,即做事專一,遵守中華民族的”從一而終”的優良品德

單一職責優勢:

  • 1、有助於清晰的理清設計與編碼的思路
  • 2、有助於簡化維護、編碼、測試的流程
  • 3、複雜問題簡單化,有利於代碼的重用
  • 4、職責之間消除藕合,有利於系統的擴展

里氏替換原則

若對每個類型S的對象o1,都存在一個類型T的對象o2,使得在所有針對編寫的程序爲T2的對象o2存在時,那麼類型T2是類型T1的子類型
簡言之”子類型必須能夠替換掉它們的基類”
分析:
子類必須全部繼承基類的功能,比如汽車,分爲卡車,轎車,客車等,卡車,轎車、客車必須全部繼承汽車的功能,否則車子開不起來
2、覆寫或實現基類方法輸入的參數可以自由設置,比如卡車卸貨的大小等
3、子類中調用類,需要調用基類或接口,比如卡車、不能調用其基類或接口則無法成爲有用的車
優點:
可以減少重複編碼,從而實現代碼的重用性
子類與基類可以相似,也可以有其各自的不同之處
基類,可以提高代碼的開放性
問題:
當父類方法與屬性進行變動時,其子類也要隨之修改,如果沒有一個科學的規範,則結果會導致大量代碼需要重構(重寫)
基於此,由於里氏替換原則以繼承爲基礎,如果對其進行合理的規範化,其結果大大降低代碼的重構,因此,我們需要實現里氏替換

依賴倒轉

定義一:高層模塊不應依賴於低層模塊,二者都應該依賴於抽象,抽象不應依賴於細節,細節應當依賴於抽象。簡言之:我們在設計系統時,需要運用抽象爲分析,而不必一開始關注類細節
定義二:要針對接口編程,不要針對實現編程。簡單之,我們需用依賴倒換原則時,可以通過接口與抽象類進行各種變量、參數、方法的聲明,並且,禁止實現類去做以上各種聲明
分析:
1、當前,在我們軟件項目開發過程中,爲了使代碼重用,我們經常會把一些通用的函數和功能和功能寫成通用模塊,以方便開發人員調用
如果我們的通用模塊設計的不合理,則無法發揮其功能,比如,我們在類型轉換功能類中封裝了oracle格式的代碼,而我們新項目使用的是sql server,此時調用通用模塊必然會出錯
爲了解決這一問題,我們必須要重構代碼,此時依賴倒轉就派上用場了。我們通過在接口中定義oracle,sqlservice等數據庫轉換方法。在sql server具體實現中實現該接口即可,如此一來
無論將來新項目使用oracle還是其他數據庫,通用模塊都無須修改或增加代碼

2、依賴接口的作用:

接口大大地提高了系統的擴展性和靈活性

接口隔離

  • 定義一:不應該強迫客戶依賴於它們不用的方法
  • 定義二:一個類對另一個類的依賴性應當建立在最小的接口上,

迪米特法則

又叫最少知識原則,它是指一個對象應當有儘可能少的瞭解,不必與不相識的人直接聯繫
優勢:
1、有利於降低類之間的藕合度,由於類與類之間去除了依賴關係,則各個軟件功能模塊之間相互獨立
2、遵循迪米特法則進行系統設計時,如果系統需擴展,則更加符合開閉原則對修改關閉的要求
3、使用迪米特法則將系統的內部數據與實現細節隱藏,從而使各個功能子模塊遠離藕合

架構師職責

架構師的職責

  • 定義規範 指導落地
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章