1

我正在使用 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方法中调用它。

有没有更优雅的方式来处理这段代码?

谢谢!

4

1 回答 1

1

这是两个单独的 HTTP 调用,并且由于 Playframework 是无状态的,因此没有直接的方法将该数据存储在绑定到同一客户端的服务器端“会话”中(当然,除非您自己实现类似的东西)。

但是,您可以做的是在 DB 调用周围使用 Play Cache API,确保数据是不可变的,然后在第二个调用到达时使用缓存的数据(如果它仍然在缓存中),并避免额外的 DB 调用。这样,它也可能由多个客户端共享,具体取决于您从数据库中读取的数据的一般性。

于 2013-07-25T20:04:15.727 回答