使用不止一种方法进行接口(interface) - 可接受还是 Not Acceptable ?

标签 go idioms

分配给它一个以上功能的接口(interface)有什么问题吗?

无论我读到什么,理想情况下,一个接口(interface)应该只有一个方法(接口(interface)应该以此命名)。但是,为一个接口(interface)设置多个方法是否有任何陷阱? 例如。

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)
}

如果是这样,如何简化上述界面或(可能)拆分为多个界面?

最佳答案

这没什么问题,因为语言支持得很好。

我相信作者是根据经验提供架构建议。具体来说,如果您的接口(interface)有很多方法,您可能在某处进行了错误的抽象。

你可以问自己一些澄清问题:

  • 这个接口(interface)会有多少种不同的实现?
  • 其中有多少会具有相同的方法实现?
  • Foos/Bars 是如何附加到实现者的?以某种方式扭转它会更简单吗?例如像 NewFoo(owner FooMgrInterface) *Foo

关于使用不止一种方法进行接口(interface) - 可接受还是 Not Acceptable ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395982/

相关文章:

ruby - 更惯用的 Ruby 写法是什么?

smtp.SendMail 在 10 分钟后因 EOF 而失败

Golang grpc : how scalable is it?

go - 从不同的包golang实现接口(interface)

c++ - 计算表达式直到一个返回真

clojure - 在 Clojure 中是否有更惯用的方法来获取集合的 N 个随机元素?

"empty lines"中的 Python 缩进

c++ - STL erase-remove idiom vs 自定义删除操作和valgrind

go - 编码/gob 是确定性的吗?

go - 检查time.now是否在一天中的两次之间