我想隐式地在合作角色系统中传播请求上下文。在角色系统中隐式传递请求上下文
为了简化和展示这种情况,我的系统有多个参与者,传递给这些参与者的消息需要包含这个RequestContext对象。
ActorA接收类型MessageA的消息 ActorB接收类型MessageB的消息
时ActorA需要将消息发送到ActorB,作为MessageA的处理部分,其执行业务逻辑,然后构造一个MessageB从逻辑以及在MessageA可用的RequestContext的结果,然后将其发送到ActorB
def handle(ma:MessageA) {
val intermediateResult = businessLogic(ma)
actorB ! MessageB(intermediateResult, ma.requestContext)
}
我们有消息的回转将被处理,并且明确地绕过的RequestContext是麻烦的。
我想创造性地使用Scala的implicits功能,以避免将传入消息中嵌入的RequestContext明确注入传出消息。
消息是大小写类(它们需要是)。我已经阅读了关于implicits规则的知识,但是将一个对象的属性引入当前的隐式作用域似乎很牵强。
这,我肯定应该是一个共同的要求。 有什么建议吗?
谢谢。
感谢您的回答。我认真考虑了这种方法,但我放弃了认为,明确传递参数比添加所有导入和隐含以便使用该功能更具可读性和冗余性 - 您不觉得吗? – vishr 2013-04-06 23:48:47
如果这是一个问题,我会分解出一个消息处理器,它是一个MessageA => MessageB,并在演员的主体中调用它。这也会增强可测试性 – Edmondo1984 2013-04-07 15:43:04