日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SOLID:開閉原則Go代碼實戰(zhàn)

一個軟件實體,如類、模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。 簡單地說:就是當(dāng)別人要修改軟件功能的時候,使得他不能修改我們原有代碼,只能新增代碼實現(xiàn)軟件功能修改的目的。

專注于為中小企業(yè)提供網(wǎng)站設(shè)計、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)奇臺免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

作為程序員先上代碼,比如我們想實現(xiàn)一個權(quá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)限的校驗。感覺也沒有啥問題,常規(guī)操作。

但如果我們此時想擴(kuò)展一下,新增一個校驗,就必須改動這里的代碼。于是利用開閉原則,我們改一下代碼:

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
}
}

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

這樣改動后,如果新增一個校驗方式,我們只需要注冊到 providers 這個切片就可以了。從而避免修改原有的代碼。

總之,開閉原則就允許我們在不修改之前代碼的前提下安全的擴(kuò)展我們的程序。


文章題目:SOLID:開閉原則Go代碼實戰(zhàn)
當(dāng)前URL:http://www.5511xx.com/article/dhsojdi.html