Кто-то может подсказать как называется подход...? я выделяю "сервисы" в отдельный модуль с одним методом (кейс бизнесухи) + интерфейс Env, который описывает что нужно методу.
import "myapp/model"
type Env interface {
GetItem(rowId int) (*model.Item, error)
UpdateItem(item *model.Item) error
}
func Resolve(env *env, rowId int) error {
item, _ := env.GetItem(rowId)
item.Quantity += 1
return env.UpdateItem(item)
}
на уровне приложения у меня огромный env, который реализует требования всех сервисов.
func main() {
env := env.New(...db connection, etc...)
// ...
increaseitem.Resolve(env, 10)
}
для тестов генерируется мок env
https://github.com/matryer/moq на каждый сервис