iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

SOLID 指物件導向程式設計的五個基本原則,當這些原則被一起應用時,它們會讓我們在開發的時候容易進行維護與擴充,SOLID 被典型的應用在測試驅動開發(TDD)上,並且是敏捷開發的基本原則的重要組成部分,以下逐一說明。

單一職責原則(SRP)

單一職責原則認為每個類都應該有一個且只有一個職責。如果說當我們要更動這個類的原因不止一個的時候,那就違背了單一責任原則。
假設我們今天有個 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(){
        // 有關登出的實作
    }
}

開放封閉原則(OCP)

開放封閉原則認為「軟體應該是對於擴充開放的,但是對於修改封閉的」的概念,聽起來有點抽象,讓我們來分析一下它裡面的 Open 跟 Close。

  • 開放(Open)
    當有新需求的時候應該可以輕易的向我們的軟體增加新功能。
  • 封閉(Close)
    不應該修改類中基本的功能

根據上面兩點來解釋就是軟體應該要可以添加新功能,而在增加新功能的時候不應該改到以前舊有的程式,用個生活的例子來舉例,大家在鎖東西時會看到的電鑽,如果今天想鎖十字螺絲,那就接上十字的頭,如果想鎖一字螺絲,那就接上十字的頭(增加新功能),但並不會修改到電鑽本身原有的功能。

里氏替換原則(LSP)

認為「程式中的物件應該是可以在不改變程式正確性的前提下被它的子類所替換的」的概念。

介面隔離原則(ISP)

認為「多個特定客戶端介面要好於一個寬泛用途的介面」的概念。

依賴反向原則(DIP)

認為一個方法應該遵從「依賴於抽象而不是一個實例」的概念。

參考資料

SOLID
使人瘋狂的 SOLID 原則


上一篇
第二十天:物件導向程式設計之抽象
下一篇
第二十四天:API 與你可能要瞭解的小夥伴們
系列文
轉職成 Android Developer 的最後一哩路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
John Lu
iT邦新手 4 級 ‧ 2022-09-30 00:04:03

SOLID 很重要!

沒錯!面試也可能會問到
還在努力應用在實務上~

我要留言

立即登入留言