gf icon indicating copy to clipboard operation
gf copied to clipboard

cmd/genservice: It is recommended that the generated service supports multiple implementations

Open chehan01 opened this issue 1 year ago • 1 comments

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 avatar Aug 18 '24 19:08 chehan01

@chehan01 gf gen serrice is kind of recommended practice. If you needed special requirements, you could custom for service gf gen service 只是一个推荐的作法,如果有特殊需求,可以自定义 service 层的实现

oldme-git avatar Aug 20 '24 03:08 oldme-git