使用激活器创建的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()
}
}
这是个好主意吗?我应该使用注射吗?我如何在我的应用程序的其余部分中使用此单例呢? (目前我的SqlHandler
是object
,因为它的方法是静态的。)
答案 0 :(得分:0)
是的,将域逻辑放在其他模块中是很好的做法,例如Service,SqlHandler不在控制器中。
我将自定义操作与身份验证和过滤,错误处理和操作控制器
中的结果代码放在一起您可以将SqlHanlder注入Controller。
class MyController @Inject()(handler: SqlHandler)