Google Appengine:无需请求即可连接到数据存储

时间:2019-02-13 17:40:41

标签: google-app-engine go google-cloud-datastore

在有关将数据存储区与appengine标准go环境结合使用的所有教程中,建议我应该从http请求中获取appengine上下文,并在操作数据存储区时使用此上下文。 Golang appengine datastore introduction

这是不幸的,因为这使我很难使用数据服务的依赖注入到我的控制器(处理程序)中。初始化控制器时,无法创建服务的一个实例,但必须将请求/上下文传递给每个与数据相关的操作。

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上下文?还是有一些常见的设计模式如何在App Engine中将处理请求和处理数据的责任分开?

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)
   }
}  

这将使代码更清晰,测试更容易。

0 个答案:

没有答案