ric*_*din 2 scala composition reactive-programming akka
我有一个管理的一些消息,像阿卡演员Find,Query中,提出了新的消息,其他类型的演员。这些参与者将以新型消息进行响应。
class Actorbase extends Actor {
override def receive = {
/* The two message below are related to each other */
case Find(coll, id) => // Do something
case QueryAck(key, value, u) => // Do something
/* The three message below are related to each other */
case Upsert(collection, id, value) => // Do something
case Response.UpsertNAck(key, msg, u) => // Do something
case Response.UpsertAck(key, u) => // Do something
/* And so on... */
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,QueryAck是类型为的消息的转发响应消息Find。UpsertNAck并且UpsertAck可能是对Upsert消息的回应。
为了使代码更具可读性和可维护性,我希望通过case两种专用方法(即manageQueries和)将两组s 分组manageUpserts,以获取类似于以下代码的内容。
class Actorbase extends Actor {
override def receive = {
manageQueries.andThen(manageUpserts)
}
}
Run Code Online (Sandbox Code Playgroud)
有可能吗?我是否需要声明一个以上的方法来返回一个Receive对象,然后以某种方式组合它们?
非常感谢。
该Receive仅仅是一个类型别名PartialFunction[Any, Unit],所以你可以定义这样的任何地方,使用组合它们f1 orElse f2:
val manageQueries: Receive = { case ... }
val manageUpserts: Receive = { case ... }
def receive = manageQueries.orElse(manageUpserts)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助