SOLID
作為開篇,這篇文章主要來介紹SOLID原則。 SOLID 原則提供了五條指導思想,如果我們遵從它們的話, 將可以顯著的提升我們軟體可維護性。
SOLID原則是針對物件導向程式設計和設計的五大依賴關係管理。SOLID首字母縮寫詞,是由Robert Cecil Martin (也被稱為 “Bob叔叔” )提出的。每個字母代表另外一個三個字母的首字母縮寫, 用來描述一個原則。
當我們處理在一份依賴關係很糟糕的軟體時,程式碼可能會變得僵化,脆弱,難以重用。我們勢必會改變現有功能或新增新的功能,而僵化的程式碼會讓這變得舉步維艱。脆弱的程式碼很容易造成bug的產生,常見的情況是你一個區域的程式碼發生變化時候,造成你其他模組出現bug。如果你遵從SOLID原則,那麼你可以編寫出更靈活更健壯的程式碼,並且具有更高的重用性。
Single Responsibility Principle
單一職責原則(SRP)宣告:“引起類變化的因素永遠不要多餘一個”。這意味著你需要設計你的類,使得每個類都只有一個目的。這並不意味著每個類應該只有一個方法,而是說類中所有的方法都要與該類的主要功能相關。那些有多個職責的類,應該被分成新的類。
當一個類具有了多項職責,它需要被更改的可能性也隨之增加。每次一個類的修改也會使得bug產生的風險增加。而通過集中職責與一點會使得風險被有效的限制。
Open / Closed Principle
開閉原則(OCP)指出:“軟體實體(classes, modules, functions etc.)應該對擴充開放,對修改關閉”。該規則的“封閉”部分規定,一旦模組被開發和測試完成,程式碼被修改的原因應該只有修復bug這一種情況。 “開放”部分說,您應該能夠擴充套件現有程式碼(而不是修改之前的程式碼)以引入新功能。與SRP一樣,該原理通過限制對現有程式碼的更改來降低引入新錯誤的風險。
Liskov Substitution Principle
里氏替換原則(LSP)宣告:“所有引用基類的地方必須能透明地使用其子類的物件”。如果你建立了一個給定型別關係的類,那麼你應該可以提供該型別或任意該型別子類的物件,而不會出現意外的結果,並且沒有依賴的類知道被提供依賴類的確切型別。如果必須檢查依賴關係的型別,以便可以根據型別修改行為,或者如果子型別產生意外的規則或副作用,則程式碼可能變得更加複雜,僵化和脆弱。
Dependency Inversion Principle
依賴倒置原則(DIP)有兩條宣告。第一個是高階模組不應該依賴於低階模組。兩者都應該依賴於抽象。第二部分規則是抽象不應該依賴於細節。細節應該依賴於抽象。
DIP主要涉及到應用中層次化的概念,其中較低階別的模組處理細節的功能,較高階別的模組使用較低階別的類來實現更大的任務。該原則規定了在類之間存在依賴關係的情況下,應使用抽象(如介面)來定義它們,而不是直接引用類。 這減少了由較低階別模組的變化導致的錯誤,導致較高層的錯誤。 DIP經常在依賴注入中被使用。
Interface Segregation Principle
介面分離原則(ISP)指出:“客戶端不應該強制依賴那些他們沒有使用到的介面”。這個規則意味著當一個類依賴另一個類時,介面中可以被依賴類顯示的成員的數量應該被最小化。通常當您建立一個具有大量方法和屬性的類時,該類將被其他類使用,並且只訪問其一個或兩個成員。隨著他們意識到的成員數量的增加,這些類更加緊密地耦合在一起。當您遵循ISP時,大類實現了多個更小的介面,根據用途對功能進行分組。依賴關係與那些相關聯用於鬆耦合,增加健壯性,靈活性以及可複用性。