SOLID 指物件導向程式設計的五個基本原則,當這些原則被一起應用時,它們會讓我們在開發的時候容易進行維護與擴充,SOLID 被典型的應用在測試驅動開發(TDD)上,並且是敏捷開發的基本原則的重要組成部分,以下逐一說明。
單一職責原則認為每個類都應該有一個且只有一個職責。如果說當我們要更動這個類的原因不止一個的時候,那就違背了單一責任原則。
假設我們今天有個 User 類,裡面存放了使用者的資料跟登入登出的方法。
data class User(
var id: Long,
var name: String,
var phone: String
){
fun signIn(){
// 有關登入的實作
}
fun signOut(){
// 有關登出的實作
}
}
當我們要對登入登出的功能進行調整的時候,這個 User 類就被修改,當我們需要對裡面存放資料的種類調整的時候,User 類也會被修改,這代表這個 User 類並不是只有一個職責。
遇到這個狀況的話,應該要把裡面的內容分離出來,像我們可以調整成 User 類專門存放使用者的資料,另外新增一個類別來存放登入登出相關的實作功能。
data class User(
var id: Long,
var name: String,
var phone: String
)
class Authentication(){
fun signIn(){
// 有關登入的實作
}
fun signOut(){
// 有關登出的實作
}
}
開放封閉原則認為「軟體應該是對於擴充開放的,但是對於修改封閉的」的概念,聽起來有點抽象,讓我們來分析一下它裡面的 Open 跟 Close。
根據上面兩點來解釋就是軟體應該要可以添加新功能,而在增加新功能的時候不應該改到以前舊有的程式,用個生活的例子來舉例,大家在鎖東西時會看到的電鑽,如果今天想鎖十字螺絲,那就接上十字的頭,如果想鎖一字螺絲,那就接上十字的頭(增加新功能),但並不會修改到電鑽本身原有的功能。
認為「程式中的物件應該是可以在不改變程式正確性的前提下被它的子類所替換的」的概念。
認為「多個特定客戶端介面要好於一個寬泛用途的介面」的概念。
認為一個方法應該遵從「依賴於抽象而不是一個實例」的概念。