当前位置: 首页 > 科技观察

SOLID-Open-ClosedPrincipleGoCodePractice

时间:2023-03-12 02:18:46 科技观察

一个软件实体,比如类、模块、函数,应该对扩展开放,对修改关闭。简单来说:当别人要修改软件功能时,他不能修改我们原来的代码,只能添加新的代码来达到修改软件功能的目的。作为程序员,代码优先,比如我们要实现一个权限验证功能。我们可以这样写:permissions=c.extractPermissionsFromJwt(ctx.Request.Header)case"basic":permissions=c.getPermissionsForBasicAuth(ctx.Request.Header)case"applicationKey":permissions=c.getPermissionsForApplicationKey(ctx.Query("applicationKey"))}}上面的方法是根据使用的认证方式jwt,basic或者applicationKey,然后分别检查权限。好像没什么问题,正常运行就好了。但是如果这时候我们要扩展,加上校验,就必须要改这里的代码。那么利用开闭原则,我们改一下代码:provider:=rangec.providers{ifctx.GetString("authType")!=provider.Type(){continue}permissions=provider.GetPermissions(ctx)break}}我们把所有的验证方法放到一个切片中存储起来在统一本地遍历中选择合适的认证方式。这样改动之后,如果我们增加验证方法,只需要注册到providersslice即可。这样可以避免修改原始代码。总之,开闭原则允许我们安全地扩展我们的程序而无需修改以前的代码。