自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SOLID:開(kāi)閉原則Go代碼實(shí)戰(zhàn)

開(kāi)發(fā) 前端
我們將所有的驗(yàn)證方法放到一個(gè)切片里面存儲(chǔ),然后在統(tǒng)一的地方遍歷選擇合適的認(rèn)證方式。這樣改動(dòng)后,如果新增一個(gè)校驗(yàn)方式,我們只需要注冊(cè)到 providers 這個(gè)切片就可以了。從而避免修改原有的代碼??傊_(kāi)閉原則就允許我們?cè)诓恍薷闹按a的前提下安全的擴(kuò)展我們的程序。

一個(gè)軟件實(shí)體,如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。 簡(jiǎn)單地說(shuō):就是當(dāng)別人要修改軟件功能的時(shí)候,使得他不能修改我們?cè)写a,只能新增代碼實(shí)現(xiàn)軟件功能修改的目的。

作為程序員先上代碼,比如我們想實(shí)現(xiàn)一個(gè)權(quán)限校驗(yàn)的功能。我們可能這樣寫:

type PermissionChecker struct {
}

func (c *PermissionChecker) HasPermission(ctx *gin.Context, name string) bool {
var permissions []string
switch ctx.GetString("authType") {
case "jwt":
permissions = c.extractPermissionsFromJwt(ctx.Request.Header)
case "basic":
permissions = c.getPermissionsForBasicAuth(ctx.Request.Header)
case "applicationKey":
permissions = c.getPermissionsForApplicationKey(ctx.Query("applicationKey"))
}

}

上面的方法,基于用于的認(rèn)證方式 jwt、basic 或者 applicationKey ,然后分別去做權(quán)限的校驗(yàn)。感覺(jué)也沒(méi)有啥問(wèn)題,常規(guī)操作。

但如果我們此時(shí)想擴(kuò)展一下,新增一個(gè)校驗(yàn),就必須改動(dòng)這里的代碼。于是利用開(kāi)閉原則,我們改一下代碼:

type PermissionChecker struct {
providers []PermissionProvider
}

func (c *PermissionChecker) HasPermission(ctx *gin.Context, name string) bool {
var permissions []string
for _, provider := range c.providers {
if ctx.GetString("authType") != provider.Type() {
continue
}

permissions = provider.GetPermissions(ctx)
break
}
}

我們將所有的驗(yàn)證方法放到一個(gè)切片里面存儲(chǔ),然后在統(tǒng)一的地方遍歷選擇合適的認(rèn)證方式。

這樣改動(dòng)后,如果新增一個(gè)校驗(yàn)方式,我們只需要注冊(cè)到 providers 這個(gè)切片就可以了。從而避免修改原有的代碼。

總之,開(kāi)閉原則就允許我們?cè)诓恍薷闹按a的前提下安全的擴(kuò)展我們的程序。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2017-10-24 15:28:27

PHP代碼簡(jiǎn)潔SOLID原則

2011-07-04 17:59:03

開(kāi)閉原則

2020-05-14 09:15:52

設(shè)計(jì)模式SOLID 原則JS

2012-03-15 11:15:13

Java設(shè)計(jì)模式

2022-07-15 09:01:15

React對(duì)象編程

2021-02-11 08:59:37

SOLID模塊倒置原則

2024-09-30 11:51:07

2022-03-24 09:44:54

TypeScriptSOLID

2011-09-01 11:27:27

數(shù)據(jù)庫(kù)調(diào)整開(kāi)閉原則

2024-12-09 08:18:33

2024-07-11 16:32:13

代碼Java

2023-10-09 18:52:14

SOLIDJava

2025-04-28 01:55:00

工具sqlmockSQL

2024-02-23 09:31:30

開(kāi)閉原則架構(gòu)業(yè)務(wù)

2024-12-05 09:13:55

Go項(xiàng)目模塊

2014-07-21 09:22:40

GoAPI

2011-12-02 10:19:24

CSS

2018-10-06 21:51:37

代碼SOLID編程

2011-06-03 15:21:51

CSS

2011-06-03 15:06:30

CSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)