Una tipica interfaccia di servizio in go potrebbe sembrare qualcosa di simile
type EventStore interface {
func Find(string) (*Event, error)
func Save(*Event) error
}
type MyController struct {}
func NewMyController(EventStore) *MyEventController {
...
}
Questa interfaccia è iniettata nelle strutture del controllore che usa una o più delle sue funzioni. Se il controller utilizza solo la funzione Find
, è ridondante conoscere Save
. Potrei dividere l'intera cosa in
type EventFinder interface {
func Find(string) (*Event, error)
}
type EventSaver interface {
func Save(*Event) (error)
}
type EventFindersSaver interface {
EventFinder
EventSaver
}
type MyController struct {}
func NewMyController(EventFinder)(*MyController){
...
}
e iniettare solo il mirino. Potrei anche solo iniettare la ricerca usando un tipo di funzione.
type EventFinder func(string) (*Event, error)
func NewMyController(f EventFinder) *MyController {
...
}
Ora, le mie domande sono
- È consigliabile definire sempre interfacce a singola funzione e quindi compilare interfacce più grandi da esse?
- Quali sono i pro / contro dell'uso dell'interfaccia a funzione singola rispetto a un tipo di funzione?