Во всех руководствах по использованию хранилища данных со стандартной средой go appengine предлагается, чтобы я получал контекст appengine из запроса http и использовал этот контекст при манипулировании хранилищем данных. Введение в хранилище данных Golang appengine
Это прискорбно, поскольку мне трудно использовать внедрение служб данных в мои контроллеры (обработчики).Я не могу создать один экземпляр aservice при инициализации контроллера, но мне приходится передавать запросы / контексты каждой операции, связанной с данными.
func createHandler(dbService db.DBService) http.HandleFunc
return func (req http.Request, resp http.Response) {
entity := bindEntity(req)
/*
I undertand that I can pass whole request to the dbService
to at least remove dependency on datastore from this handler
but it doesn't seem right to pass request everywhere
*/
ctx := appengine.NewContext(req)
dbService.StoreEntity(ctx, entity)
}
}
Есть ли способ получить контекст appengine откуда-то еще, кромедля запроса?Или есть какой-то общеизвестный шаблон проектирования, как разделить ответственность за обработку запросов и манипулирование данными в ядре приложения?
dbService := db.CreateServcie(somehowObtainedContext)
func createHandler(dbService db.DBService) http.HandleFunc
return func (req http.Request, resp http.Response) {
entity := bindEntity(req)
dbService.StoreEntity(entity)
}
}
Это сделало бы код понятнее и проще для тестирования.