在有关将数据存储区与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)
}
}
这将使代码更清晰,测试更容易。