Google Appengine: подключиться к хранилищу данных без запроса - PullRequest
0 голосов
/ 13 февраля 2019

Во всех руководствах по использованию хранилища данных со стандартной средой 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)
   }
}  

Это сделало бы код понятнее и проще для тестирования.

...