【发布时间】:2021-05-24 04:17:02
【问题描述】:
我正在编写一个软件,它使用来自不同服务的 API,方法相同但执行不同。我想知道代码是否可以在接口中组织,或者我只是继续这样工作:
type endPoint struct{
serverName string
}
func (this *endPoint) getLastDateURL () string{
if this.Name ="A"{
return "api.someAWebsite.com/getLastDate"
}
if this.Name ="B"{
return "api.someBWebsite.com/getLastDate"
}
return ""
}
func (this *endPoint) processData () output{
if this.Name ="A"{
//process in some way
return
}
if this.Name ="B"{
//process in some different way
return
}
return
}
我正在考虑的界面替代方案是这样的:
struct endPoint interface{
getLastDateURL()
processData()
}
...
Do each method for each API provider
How would I use it then?
我的最终目标是拥有可维护且干净的代码。老实说,我很讨厌我必须为每个端点编写相同的方法来实现接口,但也许我还没有那么清楚的接口概念,或者在这种情况下再次使用接口几乎没有优势,可维护和干净的代码的最终目标。
谢谢。
【问题讨论】:
-
"真的很讨厌我必须为每个端点编写相同的方法来实现接口"。您提出的解决方案使用某种开关结构来执行特定代码。写
func (e *typeX) method()真的比if e.Name == "X"这么麻烦吗?这就是我们在语言中具有多态性的原因:因此,您无需编写大的 switch 结构来为不同的值运行不同的代码,并且您可以将每组连贯的代码紧密地收集在一起,而不是将所有内容混杂在“主人”中过程。
标签: go interface coding-style