gf
gf copied to clipboard
cmd/genservice: It is recommended that the generated service supports multiple implementations
Description
在具体的业务实现中,有时需要对一个service去写多个不同的实现以应对不同的业务场景,目前GoFrame自动生成的service接口并不具备这个功能,我推荐自动生成的service可以参考以下格式:
package service
type IConfigService interface {
Foo() string
}
var localConfigService = make(map[string]IConfigService)
func Config(configName ...string) IConfigService {
if configName == nil {
if localConfigService["default"] == nil {
panic("implement not found for interface IConfigService, forgot register?")
}
return localConfigService["default"]
}
if len(configName) > 1 {
panic("too many implement name!")
}
if localConfigService[configName[0]] == nil {
panic("no such implement " + configName[0] + " for interface IConfigService, forgot register?")
}
return localConfigService[configName[0]]
}
func RegisterConfig(config IConfigService, name ...string) {
if name == nil {
localConfigService["default"] = config
}
for _, v := range name {
localConfigService[v] = config
}
}
这是我在实际业务中所用到的,如果以这种方式生成service层,那么在logic层注册和其他层调用时,既可以实现一个接口多个实现的调用,又可完美兼容原有的调用方式和逻辑。
望采纳。
Additional
No response
@chehan01
gf gen serrice is kind of recommended practice. If you needed special requirements, you could custom for service
gf gen service 只是一个推荐的作法,如果有特殊需求,可以自定义 service 层的实现