使用不止一种方法进行接口 - 可接受还是不可接受?
Go Interfaces with more than one method - Acceptable or unacceptable?
分配给它一个以上功能的接口有什么问题吗?
在我读到的所有地方,理想情况下,一个接口应该只有一个方法(接口应该以此命名)。但是,为一个接口设置多个方法是否有任何陷阱?
例如
type FooMgrInterface interface {
CreateFoo(hostname string, fooConfig interface{}) (uuid string, err error)
DeleteFoo(hostname string, fooID string) (err error)
CreateBar(hostname string, barID string, barConfig interface{}) (uuid string, err error)
DeleteBar(hostname string, barID string) (err error)
AttachBar(hostname string, fooID string, bars []string) (err error)
DetachBar(hostname string, barID string) (err error)
GetBars(hostname string) (bars []Bar, err error)
GetBar(hostname string, barID string) (bar Bar, err error)
GetFoo(hostname string, fooID string) (foo Foo, err error)
GetFoos(hostname string) (foos []Foo, err error)
}
如果可以,如何简化上述界面或(可能)拆分为多个界面?
这没什么问题,因为语言支持得很好。
我相信作者是根据经验提供架构建议。具体来说,如果你的接口有很多方法,你可能在某处有错误的抽象。
你可以问自己一些澄清问题:
- 这个接口会有多少种不同的实现?
- 其中有多少具有相同的方法实现?
- Foos/Bars 如何附加到实施者?以某种方式扭转它会更简单吗?例如
NewFoo(owner FooMgrInterface) *Foo
在https://golang.org/src/io/io.go
中寻找灵感
您将看到:
一个。 "Atomic" 接口:Reader
、Writer
、Closer
、Seeker
b。组合接口:ReaderWriter
、ReaderWriterSeeker
、ReaderSeekerCloser
等
Golang 不会抱怨巨大的接口,而是你和你的同事会抱怨大的单体接口。
我建议将您的接口分成 4 个(也许是 2 个)接口:FooOps
、FoosOps
、BarOps
、BarsOps
,然后从它们定义组合接口。
分配给它一个以上功能的接口有什么问题吗?
在我读到的所有地方,理想情况下,一个接口应该只有一个方法(接口应该以此命名)。但是,为一个接口设置多个方法是否有任何陷阱? 例如
type FooMgrInterface interface {
CreateFoo(hostname string, fooConfig interface{}) (uuid string, err error)
DeleteFoo(hostname string, fooID string) (err error)
CreateBar(hostname string, barID string, barConfig interface{}) (uuid string, err error)
DeleteBar(hostname string, barID string) (err error)
AttachBar(hostname string, fooID string, bars []string) (err error)
DetachBar(hostname string, barID string) (err error)
GetBars(hostname string) (bars []Bar, err error)
GetBar(hostname string, barID string) (bar Bar, err error)
GetFoo(hostname string, fooID string) (foo Foo, err error)
GetFoos(hostname string) (foos []Foo, err error)
}
如果可以,如何简化上述界面或(可能)拆分为多个界面?
这没什么问题,因为语言支持得很好。
我相信作者是根据经验提供架构建议。具体来说,如果你的接口有很多方法,你可能在某处有错误的抽象。
你可以问自己一些澄清问题:
- 这个接口会有多少种不同的实现?
- 其中有多少具有相同的方法实现?
- Foos/Bars 如何附加到实施者?以某种方式扭转它会更简单吗?例如
NewFoo(owner FooMgrInterface) *Foo
在https://golang.org/src/io/io.go
中寻找灵感您将看到:
一个。 "Atomic" 接口:Reader
、Writer
、Closer
、Seeker
b。组合接口:ReaderWriter
、ReaderWriterSeeker
、ReaderSeekerCloser
等
Golang 不会抱怨巨大的接口,而是你和你的同事会抱怨大的单体接口。
我建议将您的接口分成 4 个(也许是 2 个)接口:FooOps
、FoosOps
、BarOps
、BarsOps
,然后从它们定义组合接口。