Closed
Description
- Go 版本:1.16
- wechatpay-go 版本:0.2.2
我在修复 notify/handler 的过程中发现有些坏味道代码,可能当初的设计是非常好的,只是加上 notify 后变得不那么合适了。
我个人感觉可以更新一下 Validator 的定义。
目前的定义是这样:
// Validator 应答报文验证器
type Validator interface {
Validate(ctx context.Context, response *http.Response) error // 对 HTTP 应答报文进行验证
}
可否改为类似下面的 :
// Validator 验证器
type Validator interface {
Validate(v Validatable) error {
}
// 可验证对象(表示业务上下文)
type Validatable interface {
Verify(verifier auth.Verifier)
// or
GetVerifyArgs() (serialNo, message, sign string)
}
// 默认的验证器实现
type DefaultValidator struct {
verifier auth.Verifier
}
func (dv *DefaultValidator) Validate(v Validatable) error {
return v.Verify(dv.verifier)
// or
serialNo, msg, sign := v.GetVerifyArgs()
return dv.verifier.Verify(serialNo, msg, sign)
}
然后不同的业务上下文各自实现自己的 Validatable ,比如 http.Response 和 notify 就可以拆到各自的模块,互不相干。
两者在业务上确实也没啥关联,仅仅只是重用了一套验证逻辑(当然,也能重用一些小代码)。
Metadata
Metadata
Assignees
Labels
No labels