前一篇我們有提到 koa-router 提供的建構子是可以帶值的,常見用途就是讓使用者可以彈性的覆蓋預設參數,這其實是非常常見的設計,你可以在很多模組都可以看到一樣的模式 (pattern)。
new Router([opts])
預設參數 (options)
這樣的設計好處是可以讓 API 使用起來很簡單,如果有 3 個參數的情況下,使用者不需要知道參數的順序,因為都包成一個物件了。如果參數很多的情況下,在模組內實作時,又可以維護一份預設參數物件,然後直接透過 Object.assign
語法,將兩個物件合併。
const inputOption = { a: 2 }
const defaultOption = { a: 1, b: 2, c: 3 }
const options = Object.assign(target, source)
// { a: 2, b: 2, c: 3 }
另一個好處是保留參數的擴充彈性,因為你無法預期模組未來會不會需要添加額外的參數。
壞的設計範例
new Router(throw, notImplemented, methodNotAllowed)
預設參數 (options)