私は初めて Play 2 で開発しているので、コントローラーでこのようなことを頻繁に行っていることがわかりました (より単純な例の 1 つです)。
val promUser = Akka.future(UserService.findByUsername(access.username))
Async(
promUser.map {
_.map{
user => {
val promService = Akka.future(ServiceService loadOnlyWithUser (id,user.id.get))
Async(
promService.map { _.map { service =>
Ok(toJson(service))
}.getOrElse(BadRequest("not accessible"))}
)
}
}.getOrElse {
BadRequest("unauthorised")
}
}
)
未来は一つだったほうがいいの?例えば:
val promService = Akka.future{
val userOption = UserService.findByUsername(access.username)
userOption.map( user => {
ServiceService loadOnlyWithDeveloper (id,user.id.get)
}).getOrElse(None)
}
Async(
promService.map { _.map { service =>
Ok(toJson(service))
}.getOrElse(BadRequest("unauthorised"))}
)
一方で、コントローラーへの多くの先物/リターンがオーバーヘッドを追加する可能性があると考えています。一方、1 つの先物への呼び出しはより読みやすくなりますが、Akka システムで実行されるより大きな「スレッド」につながります。はるかに大規模なジョブの場合、私は追加の Akka システムを持っているので、これらはおそらく最大 4 つの SQL トランザクションしか包含しません。私がApacheベンチから解決できる限り、上記の例の間に違いはありません..不足しているものはありますか?