相关疑难解决方法(0)

在Akka接收方法中在Scala中组合特征行为

考虑以下两个特征:

trait Poked extends Actor {
  override def receive = {
    case Poke(port, x) => ReceivePoke(port, x)
  }

  def ReceivePoke(port: String, x: Any)
}

trait Peeked extends Actor {
  override def receive = {
    case Peek(port) => ReceivePeek(port)
  }

  def ReceivePeek(port: String)
}
Run Code Online (Sandbox Code Playgroud)

现在考虑我可以创建一个实现两个特征的新Actor:

val peekedpoked = actorRef(new Actor extends Poked with Peeked)
Run Code Online (Sandbox Code Playgroud)

如何撰写接收处理程序?即,接收器应该是类似下面的代码,虽然"自动生成"(即,所有特征应该组成):

def receive = (Poked.receive: Receive) orElse (Peeked.receive: Receive) orElse ...
Run Code Online (Sandbox Code Playgroud)

scala composition akka

20
推荐指数
2
解决办法
4236
查看次数

阿卡的战略模式

这是我之前的问题的延续我如何在Akka接收方法上绕过类型擦除

我有10种类型的事件,它从我需要处理的事件扩展而来.

我想在单独的特征中为每个事件实现业务逻辑,因为混合所有10个事件处理函数将产生数百(如果不是数千)行代码.

我不想为每个事件创建不同的Actor类型.例如:

class Event1Actor extend Actor{
  def receive ={
     case Event1(e) => //event1 Business Logic
   }
}

class Event2Actor extend Actor{
  def receive ={
     case Event2(e) => //event2 Business Logic
   }
}  
Run Code Online (Sandbox Code Playgroud)

和相同的Event3Actor,Event4Actor等....

这样的代码对我来说似乎很难看,因为我需要在每个Actor中实现业务逻辑.

实现10个不同的特征和10个不同的Actor类似乎也是糟糕的设计.

我正在寻找基于设计模式的某种通用解决方案,例如策略模式.

design-patterns scala akka

6
推荐指数
1
解决办法
532
查看次数

标签 统计

akka ×2

scala ×2

composition ×1

design-patterns ×1