玩:我应该在哪里/如何注入我的数据库处理程序

时间:2016-10-05 12:15:22

标签: java scala playframework-2.0

使用激活器创建的Play项目(Scala或Java,我在这里使用Scala)从以下示例开始:

class MyController @Inject() {...}

有几个这样的组件可以默认注入,例如Environment,其中一个是Database

class MyController @Inject()(db: Database) {...}

它设法读取我的conf并创建一个我可以在此控制器中使用的相应Database对象 - 如果不复制db配置,我无法做到这一点。

但它是否适合这样做?大多数控制器都不会使用数据库,所以为什么不使用一种" SqlHandler"这与所有与数据库相关的东西都做了。我虽然喜欢

@Singleton
class SqlHandler @Inject()(db: Database) {
  def select() = {...db...}
  def insert() = {...db...}
}

然后将其称为

class MyController @Inject() {
  def mySqlAction = Action {
    SqlHandler.select()
  }
}

这是个好主意吗?我应该使用注射吗?我如何在我的应用程序的其余部分中使用此单例呢? (目前我的SqlHandlerobject,因为它的方法是静态的。)

1 个答案:

答案 0 :(得分:0)

是的,将域逻辑放在其他模块中是很好的做法,例如Service,SqlHandler不在控制器中。

我将自定义操作与身份验证和过滤,错误处理和操作控制器

中的结果代码放在一起

您可以将SqlHanlder注入Controller。

class MyController @Inject()(handler: SqlHandler)