我正在使用Play Framework 2,并希望在处理表单和验证时尽量减少代码重复。
我有控制器,可以呈现表单并处理表单提交:
def create() = Action { implicit request =>
//create form
//DB calls to build comboboxes and tables
Ok(views.html.create(form, ...))
}
def handleCreate() = Action { implicit request =>
createForm.bindFromRequest().fold(
formWithErrors => {
//DB calls to build comboboxes and tables
BadRequest(views.html.create(formWithErrors, ...))
},
obj => {
//other logic
})
}
问题出在//DB calls to build comboboxes and tables
部分。我不想复制这部分内容。当然,我可以将其提取到方法中,然后在create
和handleCreate
方法中调用它。
处理此代码是否更优雅?
谢谢!
答案 0 :(得分:1)
这是两个单独的HTTP调用,并且由于Playframework是无状态的,因此没有直接的方法将该数据存储在绑定到同一客户端的服务器端“会话”中(除非您自己实现类似的东西)。
然而,您可以使用围绕数据库调用的Play Cache API,确保数据是不可变的,然后使用缓存的数据如果当第二个调用到达时它仍在缓存中并避免这种额外的DB调用。这样,它也可能由多个客户端共享,具体取决于您从数据库读取的数据的一般情况。