分配给它的函数多于一个的接口有什么问题吗?使用多种方法转到接口 - 可接受还是不可接受?
到处都是我读的,理想情况下接口应该只有一个方法(接口应该以什么名字命名)。但是有没有任何一个坑会有不止一种界面方法?例如,
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)
}
如果是这样,上面的接口怎么可以简化或者(可能)分成多个接口?
没关系,但有10种方法似乎错了。标准库本身有2-3个方法(sync.Locker,sort.Interface),它们并不是组成的,我在代码中也是这样做的。但在你的情况下,你似乎在想着接口的方式。 –
你的代码看起来非常类似于[这个例子](https://youtu.be/ltqV6pDKZD8?t=29m13s)...观察它大约3分钟,以了解它为什么被认为是反模式。这并不意味着它是错误的。这只是一个类型实现单个接口所需的很多方法,它可能会提出这样的问题:这是一个接口只是为了避免依赖具体类型来传递接口吗?这个接口的所有方法真的需要在这个接口中吗? –
@ChronoKitsune其更多来自互换性方面。它更多的是实现代理模式。我的应用程序只知道上述在界面中提到的方法。这些方法不应该改变。他们是如何实现的(想想第三方库)。 – nitimalh