iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 3
1
Software Development

模組化設計系列 第 3

Day03 - 模組化原則:單一職責原則 (SRP)

單一職責原則 (Single responsibility principle) 簡稱 SRP,相信大家對它都不陌生,它時常出現在物件導向的書中,我最近一次看到它是在Clean Architecture裡,Robert C. Martin 在書中有提到,在所有 SOLID 原則中,SRP 是一個最容易被誤解的設計原則,因為它的名字會讓很多程式設計師,就假設它意味著每個模組都應該只做一件事。但其實這樣對 SRP 的描述不完全正確,在此就不劇透了,請大家自己去買書來看。

一個模組應該只對唯一的一個角色 (actor) 負責 - Robert C. Martin

我們在忠於 DRY(Don't Repeat Yourself) 原則下,經常把相同的程式邏輯抽成共用。但若兩段程式碼字面上看起來完全相同,背後的需求是不同的,若這樣偶然重複的程式碼合併在一起,反而容易造成雙方邏輯不必要的相依,最後還是要重新拆開來。俗話說:「請神容易,送神難。」所以我們在設計模組時,需要非常小心這點。如果一個模組的存在是針對一個很「特定的目的」,那就符合 SRP,我們來小小偷窺一下 webdriverio 原始碼。

https://github.com/webdriverio/webdriverio/tree/master/packages

你可以看到許多以 wdio-*-reporter 的模組,它們存在的目的都只有一個功能,就是輸出測試報表。這些模組之間的差異呢,只是針對測試結果的不同呈現方式有所不同。

wdio-allure-reporter
wdio-concise-reporter
wdio-dot-reporter
wdio-junit-reporter
wdio-smoke-test-reporter
wdio-spec-reporter
wdio-sumologic-reporter

並且作者還額外保留了 wdio-reporter 的模組化設計,讓開發者可以自訂自己格式的測試報表。

import Reporter from '@wdio/reporter'

export default MyCustomeReporter extends Reporter {
    constructor () {
        super()
        // your custom logic if necessary
        // ...
    }

    onRunnerStart () {
        // ...
    }

    onSuiteStart (suite) {
        // ...
    }

    // ...
}

wdio-video-reporter 就是素人開發的延伸模組,當我們能做出好的設計架構,才有機會吸引到其他開發者入坑。

題外話,最近我家附近的最後唯一一間書局倒了,忽然有感而發。


上一篇
Day02 - 什麼是模組和模組化設計
下一篇
Day04 - 模組化原則:可替換性
系列文
模組化設計30

尚未有邦友留言

立即登入留言