面向JavaScript的SOLID設計原則

infoq發表於2014-01-26

  Derick Bailey是一位專注於JavaScript的作者和開發者,他最近在CodeMash上發表的演講中指出:很多開發者都使用過面嚮物件語言,也有很多開發者使用過JavaScript,但很少有人把物件導向原則和JavaScript放在一起使用過。在物件導向程式設計中,我們會把這些基礎和原則看做工作的根基,但是從基於類的靜態語言轉向基於鬆散的型別而非類的語言時,往往發現同樣的原則很難應用。

  Derick宣稱,為幫助開發者編寫良好且穩定的JavaScript程式碼,有很多很好的原則、實踐和模式可供使用,一個例子就是Robert C. Martin於本世紀初總結出的SOLID原則

  Derick把SOLID原則描述為可以很好地配合的五個獨立模式,他還使用程式碼示例依次介紹了所有這些模式,同時看了一些JavaScript特有的風格,這些風格使得在JavaScript中應用SOLID原則與在像Java和C#這樣的語言中應用有點不同。

  Derick對這五種原則的定義是:

  • 單一職責原則。當需要做出修改時,原因只能有一個。這有助於幫助開發者理解所構建事物的上下文和職責,並理解何時需要修改。
  • 開放-封閉原則。行為的改變應該可以在不改變現有程式碼的條件下進行,例如,使用擴充套件點和建立可以插入的程式碼。
  • 里氏替換原則。派生的物件或型別必需能夠替換其基類。在Derick看來,這是開放-封閉原則的一個更為專注的版本。
  • 介面隔離原則。不應該強迫客戶依賴沒有使用的介面。有個問題是,JS中沒有顯式的介面,不過我們有些方法繞過。
  • 依賴倒轉原則。考慮兩個概念,抽象(Abstraction)和所有權(Ownership)。前者指的是我們應該依賴抽象,而不是依賴具體實現;後者指的是低層實現應該依賴高層概念(譯者注:關於Ownership,Derick在演講中提到了“細節依賴策略,而策略不依賴細節”)。

  在演講最後,Derick指出:如果系統中有規模龐大、整整一片的程式碼塊,SOLID可以幫你把它們拆成單個的部分。儘管不會降低複雜性,但是會幫你建立抽象,並將細節組織為我們可以理解的更大的概念。

  演講相關的Slides和JavaScript程式碼下載

  檢視英文原文:SOLID Design Principles for JavaScript

相關文章