分配給它的函數多於一個的接口有什麼問題嗎?使用多種方法轉到接口 - 可接受還是不可接受?
到處都是我讀的,理想情況下接口應該只有一個方法(接口應該以什麼名字命名)。但是有沒有任何一個坑會有不止一種界面方法?例如,
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